{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Parallelization in skforecast"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Parallelization rules\n",
    "\n",
    "The `n_jobs` argument facilitates the parallelization of specific functionalities to enhance speed within the skforecast library. Parallelization has been strategically integrated at two key levels: during the process of forecaster fitting and during the backtesting phase, which also encompasses hyperparameter search. When the `n_jobs` argument is set to its default value of `'auto'`, the library dynamically determines the number of jobs to employ, guided by the ensuing guidelines:\n",
    "\n",
    "**Estimator**\n",
    "\n",
    "If estimator is a `LGBMRegressor` with internal` n_jobs != 1`, then `n_jobs = 1` in forecasting fitting and backtesting. This is because `lightgbm` is highly optimized for gradient boosting and parallelizes operations at a very fine-grained level, making additional parallelization unnecessary and potentially harmful due to resource contention.\n",
    "\n",
    "**Forecaster Fitting**\n",
    "\n",
    "- If the forecaster is either <code>ForecasterDirect</code> or <code>ForecasterDirectMultiVariate</code>, and the underlying estimator happens to be a linear estimator, then `n_jobs` is set to 1.\n",
    "\n",
    "- Otherwise, if none of the above conditions hold, the `n_jobs` value is determined as `cpu_count() - 1`, aligning with the number of available CPU cores.\n",
    "\n",
    "**Backtesting**\n",
    "\n",
    "- If `refit` is an integer, then `n_jobs = 1`. This is because parallelization doesn`t work with intermittent refit.\n",
    "\n",
    "- If forecaster is <code>ForecasterRecursive</code> and the underlying estimator is linear, `n_jobs` is set to 1.\n",
    "\n",
    "- If forecaster is <code>ForecasterRecursive</code>, the underlying estimator is not a linear estimator, then `n_jobs` is set to `cpu_count() - 1`.\n",
    "\n",
    "- If forecaster is <code>ForecasterDirect</code> or <code>ForecasterDirectMultiVariate</code> and `refit = True`, then `n_jobs` is set to `cpu_count() - 1`.\n",
    "\n",
    "- If forecaster is <code>ForecasterDirect</code> or <code>ForecasterDirectMultiVariate</code> and `refit = False`, then `n_jobs` is set to 1.\n",
    "\n",
    "- If forecaster is <code>ForecasterRecursiveMultiSeries</code>, then `n_jobs` is set to `cpu_count() - 1`.\n",
    "\n",
    "- If forecaster is <code>ForecasterSarimax</code> or <code>ForecasterEquivalentDate</code>, then `n_jobs = 1`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"admonition note\" name=\"html-admonition\" style=\"background: rgba(255,145,0,.1); padding-top: 0px; padding-bottom: 6px; border-radius: 8px; border-left: 8px solid #ff9100; border-color: #ff9100; padding-left: 10px; padding-right: 10px\">\n",
    "\n",
    "<p class=\"title\">\n",
    "    <i style=\"font-size: 18px; color:#ff9100; border-color: #ff1744;\"></i>\n",
    "    <b style=\"color: #ff9100;\"> <span style=\"color: #ff9100;\">&#9888;</span> Warning</b>\n",
    "</p>\n",
    "\n",
    "The automatic selection of the parallelization level relies on heuristics and is therefore not guaranteed to be optimal. In addition, it is important to keep in mind that many estimators already parallelize their fitting procedures inherently. As a result, introducing additional parallelization may not necessarily improve overall performance. For a more detailed look at parallelization, visit <a href=\"../api/model_selection.html#skforecast.model_selection._utils.select_n_jobs_backtesting\"><code>select_n_jobs_backtesting</code></a> and <a href=\"../api/utils.html#skforecast.utils.utils.select_n_jobs_fit_forecaster\"><code>select_n_jobs_fit_forecaster</code></a>.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Libraries and data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Libraries\n",
    "# ==============================================================================\n",
    "import platform\n",
    "import psutil\n",
    "import skforecast\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import scipy\n",
    "import sklearn\n",
    "import time\n",
    "import warnings\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import Ridge\n",
    "from sklearn.ensemble import HistGradientBoostingRegressor\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from lightgbm import LGBMRegressor\n",
    "\n",
    "from skforecast.recursive import ForecasterRecursive\n",
    "from skforecast.direct import ForecasterDirect\n",
    "from skforecast.recursive import ForecasterRecursiveMultiSeries\n",
    "from skforecast.direct import ForecasterDirectMultiVariate\n",
    "\n",
    "from skforecast.model_selection import TimeSeriesFold\n",
    "from skforecast.model_selection import backtesting_forecaster\n",
    "from skforecast.model_selection import grid_search_forecaster\n",
    "from skforecast.model_selection import grid_search_forecaster_multiseries\n",
    "from skforecast.model_selection import backtesting_forecaster_multiseries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Python version      : 3.12.4\n",
      "scikit-learn version: 1.5.2\n",
      "skforecast version  : 0.14.0\n",
      "pandas version      : 2.2.3\n",
      "numpy version       : 2.0.2\n",
      "scipy version       : 1.14.1\n",
      "\n",
      "Processor type: Intel64 Family 6 Model 140 Stepping 1, GenuineIntel\n",
      "Platform type: Windows-11-10.0.26100-SP0\n",
      "Operating system: Windows\n",
      "Operating system release: 11\n",
      "Operating system version: 10.0.26100\n",
      "Number of physical cores: 4\n",
      "Number of logical cores: 8\n"
     ]
    }
   ],
   "source": [
    "# Versions\n",
    "# ==============================================================================\n",
    "print(f\"Python version      : {platform.python_version()}\")\n",
    "print(f\"scikit-learn version: {sklearn.__version__}\")\n",
    "print(f\"skforecast version  : {skforecast.__version__}\")\n",
    "print(f\"pandas version      : {pd.__version__}\")\n",
    "print(f\"numpy version       : {np.__version__}\")\n",
    "print(f\"scipy version       : {scipy.__version__}\")\n",
    "print(\"\")\n",
    "\n",
    "# System information\n",
    "# ==============================================================================\n",
    "print(f\"Processor type: {platform.processor()}\")\n",
    "print(f\"Platform type: {platform.platform()}\")\n",
    "print(f\"Operating system: {platform.system()}\")\n",
    "print(f\"Operating system release: {platform.release()}\")\n",
    "print(f\"Operating system version: {platform.version()}\")\n",
    "print(f\"Number of physical cores: {psutil.cpu_count(logical=False)}\")\n",
    "print(f\"Number of logical cores: {psutil.cpu_count(logical=True)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    0.682352\n",
       "1    0.053821\n",
       "2    0.220360\n",
       "3    0.184372\n",
       "4    0.175906\n",
       "Name: y, dtype: float64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>exog_0</th>\n",
       "      <th>exog_1</th>\n",
       "      <th>exog_2</th>\n",
       "      <th>exog_3</th>\n",
       "      <th>exog_4</th>\n",
       "      <th>exog_5</th>\n",
       "      <th>exog_6</th>\n",
       "      <th>exog_7</th>\n",
       "      <th>exog_8</th>\n",
       "      <th>exog_9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.593121</td>\n",
       "      <td>0.353471</td>\n",
       "      <td>0.336277</td>\n",
       "      <td>0.399734</td>\n",
       "      <td>0.915459</td>\n",
       "      <td>0.822278</td>\n",
       "      <td>0.480418</td>\n",
       "      <td>0.929802</td>\n",
       "      <td>0.950948</td>\n",
       "      <td>0.863556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.764104</td>\n",
       "      <td>0.638191</td>\n",
       "      <td>0.956624</td>\n",
       "      <td>0.178105</td>\n",
       "      <td>0.434077</td>\n",
       "      <td>0.137480</td>\n",
       "      <td>0.837667</td>\n",
       "      <td>0.768947</td>\n",
       "      <td>0.244235</td>\n",
       "      <td>0.815336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.475312</td>\n",
       "      <td>0.312415</td>\n",
       "      <td>0.353596</td>\n",
       "      <td>0.272162</td>\n",
       "      <td>0.772064</td>\n",
       "      <td>0.110216</td>\n",
       "      <td>0.596551</td>\n",
       "      <td>0.688549</td>\n",
       "      <td>0.651380</td>\n",
       "      <td>0.191837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.039253</td>\n",
       "      <td>0.962713</td>\n",
       "      <td>0.189194</td>\n",
       "      <td>0.910629</td>\n",
       "      <td>0.169796</td>\n",
       "      <td>0.697751</td>\n",
       "      <td>0.830913</td>\n",
       "      <td>0.484824</td>\n",
       "      <td>0.634634</td>\n",
       "      <td>0.862865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.872447</td>\n",
       "      <td>0.861421</td>\n",
       "      <td>0.394829</td>\n",
       "      <td>0.877763</td>\n",
       "      <td>0.286779</td>\n",
       "      <td>0.131008</td>\n",
       "      <td>0.450185</td>\n",
       "      <td>0.898167</td>\n",
       "      <td>0.590147</td>\n",
       "      <td>0.045838</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     exog_0    exog_1    exog_2    exog_3    exog_4    exog_5    exog_6  \\\n",
       "0  0.593121  0.353471  0.336277  0.399734  0.915459  0.822278  0.480418   \n",
       "1  0.764104  0.638191  0.956624  0.178105  0.434077  0.137480  0.837667   \n",
       "2  0.475312  0.312415  0.353596  0.272162  0.772064  0.110216  0.596551   \n",
       "3  0.039253  0.962713  0.189194  0.910629  0.169796  0.697751  0.830913   \n",
       "4  0.872447  0.861421  0.394829  0.877763  0.286779  0.131008  0.450185   \n",
       "\n",
       "     exog_7    exog_8    exog_9  \n",
       "0  0.929802  0.950948  0.863556  \n",
       "1  0.768947  0.244235  0.815336  \n",
       "2  0.688549  0.651380  0.191837  \n",
       "3  0.484824  0.634634  0.862865  \n",
       "4  0.898167  0.590147  0.045838  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>series_1</th>\n",
       "      <th>series_2</th>\n",
       "      <th>series_3</th>\n",
       "      <th>series_4</th>\n",
       "      <th>series_5</th>\n",
       "      <th>series_6</th>\n",
       "      <th>series_7</th>\n",
       "      <th>series_8</th>\n",
       "      <th>series_9</th>\n",
       "      <th>series_10</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.967448</td>\n",
       "      <td>0.580646</td>\n",
       "      <td>0.643348</td>\n",
       "      <td>0.461737</td>\n",
       "      <td>0.450859</td>\n",
       "      <td>0.894496</td>\n",
       "      <td>0.037967</td>\n",
       "      <td>0.097698</td>\n",
       "      <td>0.094356</td>\n",
       "      <td>0.893528</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.207450</td>\n",
       "      <td>0.194904</td>\n",
       "      <td>0.377063</td>\n",
       "      <td>0.975065</td>\n",
       "      <td>0.351034</td>\n",
       "      <td>0.812253</td>\n",
       "      <td>0.265956</td>\n",
       "      <td>0.262733</td>\n",
       "      <td>0.784995</td>\n",
       "      <td>0.674256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.520431</td>\n",
       "      <td>0.985069</td>\n",
       "      <td>0.039559</td>\n",
       "      <td>0.541797</td>\n",
       "      <td>0.612761</td>\n",
       "      <td>0.640336</td>\n",
       "      <td>0.823467</td>\n",
       "      <td>0.768387</td>\n",
       "      <td>0.561777</td>\n",
       "      <td>0.600835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.866694</td>\n",
       "      <td>0.165510</td>\n",
       "      <td>0.819767</td>\n",
       "      <td>0.691179</td>\n",
       "      <td>0.717778</td>\n",
       "      <td>0.392694</td>\n",
       "      <td>0.094067</td>\n",
       "      <td>0.271990</td>\n",
       "      <td>0.467866</td>\n",
       "      <td>0.041054</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.406310</td>\n",
       "      <td>0.657688</td>\n",
       "      <td>0.630730</td>\n",
       "      <td>0.694424</td>\n",
       "      <td>0.943934</td>\n",
       "      <td>0.888538</td>\n",
       "      <td>0.470363</td>\n",
       "      <td>0.518283</td>\n",
       "      <td>0.719674</td>\n",
       "      <td>0.010789</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   series_1  series_2  series_3  series_4  series_5  series_6  series_7  \\\n",
       "0  0.967448  0.580646  0.643348  0.461737  0.450859  0.894496  0.037967   \n",
       "1  0.207450  0.194904  0.377063  0.975065  0.351034  0.812253  0.265956   \n",
       "2  0.520431  0.985069  0.039559  0.541797  0.612761  0.640336  0.823467   \n",
       "3  0.866694  0.165510  0.819767  0.691179  0.717778  0.392694  0.094067   \n",
       "4  0.406310  0.657688  0.630730  0.694424  0.943934  0.888538  0.470363   \n",
       "\n",
       "   series_8  series_9  series_10  \n",
       "0  0.097698  0.094356   0.893528  \n",
       "1  0.262733  0.784995   0.674256  \n",
       "2  0.768387  0.561777   0.600835  \n",
       "3  0.271990  0.467866   0.041054  \n",
       "4  0.518283  0.719674   0.010789  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Data\n",
    "# ==============================================================================\n",
    "n = 5_000\n",
    "rgn = np.random.default_rng(seed=123)\n",
    "y = pd.Series(rgn.random(size=(n)), name=\"y\")\n",
    "exog = pd.DataFrame(rgn.random(size=(n, 10)))\n",
    "exog.columns = [f\"exog_{i}\" for i in range(exog.shape[1])]\n",
    "multi_series = pd.DataFrame(rgn.random(size=(n, 10)))\n",
    "multi_series.columns = [f\"series_{i + 1}\" for i in range(multi_series.shape[1])]\n",
    "y_train = y[:-int(n / 2)]\n",
    "display(y.head())\n",
    "display(exog.head())   \n",
    "display(multi_series.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Benchmark ForecasterRecursive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------------------\n",
      "ForecasterRecursive\n",
      "-------------------\n",
      "\n",
      "Ridge(alpha=0.1, random_state=77) {'alpha': [0.1, 0.1, 0.1]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=-1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "HistGradientBoostingRegressor(max_depth=5, max_iter=50, random_state=77) {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>estimator</th>\n",
       "      <th>method</th>\n",
       "      <th>False</th>\n",
       "      <th>True</th>\n",
       "      <th>pct_improvement</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>2.097107</td>\n",
       "      <td>0.848587</td>\n",
       "      <td>59.535365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>6.490748</td>\n",
       "      <td>2.794112</td>\n",
       "      <td>56.952390</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.005000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.527734</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>8.432383</td>\n",
       "      <td>3.252936</td>\n",
       "      <td>61.423293</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>2.136809</td>\n",
       "      <td>0.972203</td>\n",
       "      <td>54.502080</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>4.557765</td>\n",
       "      <td>3.956567</td>\n",
       "      <td>13.190632</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.005999</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.114982</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>8.766446</td>\n",
       "      <td>4.257316</td>\n",
       "      <td>51.436232</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>1.095819</td>\n",
       "      <td>0.515112</td>\n",
       "      <td>52.992953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>4.761011</td>\n",
       "      <td>2.660067</td>\n",
       "      <td>44.128113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.005002</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.239274</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>4.372416</td>\n",
       "      <td>2.121355</td>\n",
       "      <td>51.483235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>0.242297</td>\n",
       "      <td>0.119852</td>\n",
       "      <td>50.535045</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>0.596156</td>\n",
       "      <td>8.014275</td>\n",
       "      <td>-1244.324804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.007996</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.050004</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>0.681082</td>\n",
       "      <td>0.359283</td>\n",
       "      <td>47.248207</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            estimator               method  \\\n",
       "0   HistGradientBoostingRegressor(max_depth=5, max...    backtest_no_refit   \n",
       "1   HistGradientBoostingRegressor(max_depth=5, max...       backtest_refit   \n",
       "2   HistGradientBoostingRegressor(max_depth=5, max...     create_train_X_y   \n",
       "3   HistGradientBoostingRegressor(max_depth=5, max...                  fit   \n",
       "4   HistGradientBoostingRegressor(max_depth=5, max...  gridSearch_no_refit   \n",
       "5   LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "6   LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "7   LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "8   LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "9   LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "10  LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "11  LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "12  LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "13  LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "14  LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "15                  Ridge(alpha=0.1, random_state=77)    backtest_no_refit   \n",
       "16                  Ridge(alpha=0.1, random_state=77)       backtest_refit   \n",
       "17                  Ridge(alpha=0.1, random_state=77)     create_train_X_y   \n",
       "18                  Ridge(alpha=0.1, random_state=77)                  fit   \n",
       "19                  Ridge(alpha=0.1, random_state=77)  gridSearch_no_refit   \n",
       "\n",
       "       False      True  pct_improvement  \n",
       "0   2.097107  0.848587        59.535365  \n",
       "1   6.490748  2.794112        56.952390  \n",
       "2   0.005000       NaN              NaN  \n",
       "3   0.527734       NaN              NaN  \n",
       "4   8.432383  3.252936        61.423293  \n",
       "5   2.136809  0.972203        54.502080  \n",
       "6   4.557765  3.956567        13.190632  \n",
       "7   0.005999       NaN              NaN  \n",
       "8   0.114982       NaN              NaN  \n",
       "9   8.766446  4.257316        51.436232  \n",
       "10  1.095819  0.515112        52.992953  \n",
       "11  4.761011  2.660067        44.128113  \n",
       "12  0.005002       NaN              NaN  \n",
       "13  0.239274       NaN              NaN  \n",
       "14  4.372416  2.121355        51.483235  \n",
       "15  0.242297  0.119852        50.535045  \n",
       "16  0.596156  8.014275     -1244.324804  \n",
       "17  0.007996       NaN              NaN  \n",
       "18  0.050004       NaN              NaN  \n",
       "19  0.681082  0.359283        47.248207  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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Ijg4GBcuXIC/vz/8/f0RFRVVEqtFRERERESlhEwIIUo6CGWZN28eVqxYgTt37gAAVqxYgYkTJyI+Ph6ampoAgPHjx2PXrl24fv06ACAgIAApKSnYs2ePVE/9+vXh4uKClStXFmm5ycnJMDAwQFJSEvT19Yt5rYiIiErGkcbeJR1CsfI+eqSkQyCiUkCR3OCLaTnLT1JSEipUqCANnzx5Eo0bN5YSMwDw9fVFdHQ0Xrx4IZXx8fGRq8fX1xcnT578NEETEREREVGp9MUmZ7du3cLSpUvx7bffSuPi4+NhamoqVy53OD4+vtAyudPzk56ejuTkZLkPERERERGRIlQ+ORs/fjxkMlmhn9xbEnM9ePAAfn5+6NSpE/r166f0GOfMmQMDAwPpY25urvRlEhERERHRl6VMSQfwPqNHj0ZQUFChZaytraX/P3z4EE2bNoWXl5dcRx8AYGZmhsePH8uNyx02MzMrtEzu9PxMmDABo0aNkoaTk5OZoBERERERkUJUPjkzNjaGsbFxkco+ePAATZs2hbu7O9asWQM1NfmGQU9PT0ycOBGZmZnQ0NAAAISGhqJGjRowNDSUyoSFhWHEiBHSfKGhofD09CxwuVpaWtDS0lJwzYiIiIiIiP6Pyt/WWFQPHjxAkyZNUK1aNcyfPx9PnjxBfHy83LNi3bp1g6amJoKDg3HlyhVs3rwZS5YskWv1Gj58OPbv348FCxbg+vXrmDZtGs6dO4chQ4aUxGoREREREVEpofItZ0UVGhqKW7du4datW6hatarctNy3BRgYGODgwYMYPHgw3N3dYWRkhClTpqB///5SWS8vL2zcuBGTJk3C999/D1tbW+zatQu1a9f+pOtDRERERESlyxf9nrOSwvecERHRl4jvOSMiUhzfc0ZERERERPSZYXJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAm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xt27dwEAixcvxu7du4s1OCIiIiIiotJC4eRsxYoVGDVqFFq1aoXExETpGbPy5ctj8eLFxR0fERERERFRqaBwcrZ06VKsWrUKEydOhLq6ujTew8MDly9fLtbgiIiIiIiISguFk7OYmBi4urrmGa+lpYWUlJRiCYqIiIiIiKi0UTg5s7KyQmRkZJ7x+/fvR61atYojJiIiIiIiolJH4d4aR40ahcGDByMtLQ1CCJw5cwZ//vkn5syZg99++00ZMRIREREREX3xFE7O+vbtCx0dHUyaNAmpqano1q0bKleujCVLlqBLly7KiJGIiIiIiOiLp3ByBgDdu3dH9+7dkZqailevXsHExKS44yIiIiIiIipVFH7m7IcffkBMTAwAQFdXl4kZERERERFRMVA4Odu6dSuqV68OLy8vLF++HE+fPlVGXERERERERKWKwsnZxYsXcenSJTRp0gTz589H5cqV0bp1a2zcuBGpqanKiJGIiIiIiOiLp3ByBgAODg6YPXs27ty5g4iICFhaWmLEiBEwMzMr7viIiIiIiIhKhQ9Kzt5WtmxZ6OjoQFNTE5mZmcURExERERERUanzQclZTEwMZs2aBQcHB3h4eODChQuYPn064uPjizs+IiIiIiKiUkHhrvTr16+Ps2fPwsnJCb1790bXrl1RpUoVZcRGRERERERUaiicnDVv3hyrV6+Gvb29MuIhIiIiIiIqlRROzmbNmiX9XwgBAJDJZMUXERERERERUSn0Qc+crVu3Do6OjtDR0YGOjg6cnJywfv364o6NiIiIiIio1FC45WzhwoWYPHkyhgwZggYNGgAA/v33XwwYMABPnz7FyJEjiz1IIiIiIiKiL53CydnSpUuxYsUK9OrVSxrXtm1bODg4YNq0aUzOiIiIiIiIPoDCtzU+evQIXl5eecZ7eXnh0aNHxRIUERERERFRaaNwcla9enVs2bIlz/jNmzfD1ta2WIIiIiIiIiIqbRS+rXH69OkICAjA0aNHpWfOjh8/jrCwsHyTNiIiIiIiIno/hVvOOnTogDNnzsDIyAi7du3Crl27YGRkhDNnzuCbb75RRoxERERERERfPIVazjIzM/Htt99i8uTJ2LBhg7JiIiIiIiIiKnUUajnT0NDA9u3blRULERERERFRqaXwbY3+/v7YtWuXEkIhIiIiIiIqvRTuEMTW1hYzZszA8ePH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bds2ZcX62eB7zoiI6EvE95wRESlOae85A970nvjDDz8gNDQUmpqa0vhmzZrh1KlTikdLREREREREiidnly9fxjfffJNnvImJCZ4+fVosQREREREREZU2Cidn5cuXz/e9YRcuXECVKlWKJSgiIiIiIqLSRuHkrEuXLhg3bhzi4+Mhk8mQk5OD48eP47vvvkOvXr2UESMREREREdEXT+HkbPbs2ahZsybMzc3x6tUr2Nvbo3HjxvDy8sKkSZOUESMREREREdEXT+H3nGlqamLVqlWYMmUKLl++jFevXsHV1RW2trbKiI+IiIiIiKhUKHJylpOTg3nz5uGvv/5CRkYGmjdvjqlTp0JHR0eZ8REREREREZUKRb6tcdasWfj+++9Rrlw5VKlSBUuWLMHgwYOVGRsREREREVGpUeTkbN26dVi+fDkOHDiAXbt24e+//8Yff/yBnJwcZcZHRERERERUKhQ5OYuLi0OrVq2kYR8fH8hkMjx8+FApgREREREREZUmRU7OsrKyoK2tLTdOQ0MDmZmZxR4UERERERFRaVPkDkGEEAgKCoKWlpY0Li0tDQMGDEDZsmWlcTt27CjeCImIiIiIiEqBIidngYGBecb16NGjWIMhIiIiIiIqrYqcnK1Zs0aZcRAREREREZVqRX7mjIiIiIiIiJSHyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCqAyRkREREREZEKYHJGRERERESkApicERERERERqQAmZ0RERERERCrgs0nOZs2aBS8vL+jq6qJ8+fL5lomLi0Pr1q2hq6sLExMTjBkzBllZWXJlDh8+DDc3N2hpaaF69eoICQnJU8/PP/8MS0tLaGtro169ejhz5owS1oiIiIiIiOj/fDbJWUZGBjp16oSBAwfmOz07OxutW7dGRkYGTpw4gbVr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aWnFvCWIiKikMTkjIqJSr0+fPlizZo00vHr1avTu3VuuzJw5c7Bu3TqsXLkSV65cwciRI9GjRw8cOXIE5ubm2L59OwAgOjoajx49wpIlS6R5165di7Jly+L06dP48ccfMWPGDISGhgJ4k7i1a9cOz58/x5EjRxAaGoo7d+4gICBAmn/Lli2YNm0aZs+ejXPnzqFSpUpYvny5MjcJERGVAJkQQpR0EERERCUhKCgIiYmJWLVqFczNzREdHQ0AqFmzJu7du4e+ffuifPny+OWXX1ChQgUcOnQInp6e0vx9+/ZFamoqNm7ciMOHD6Np06Z48eIFypcvL5Vp0qQJsrOzcezYMWlc3bp10axZM8ydOxehoaFo2bIlYmJiYG5uDgC4evUqHBwccObMGdSpUwdeXl5wdXXFzz//LNVRv359pKWlITIyUrkbiYiIPpkyJR0AERFRSTM2Nkbr1q0REhICIQRat24NIyMjafqtW7eQmpqKr776Sm6+jIwMuVsfC+Lk5CQ3XKlSJSQkJAAArl27BnNzcykxAwB7e3uUL18e165dQ506dXDt2rU8nZZ4enoiIiJC4XUlIiLVxeSMiIgIb25tHDJkCADItVABwKtXrwAAe/fuRZUqVeSmaWlpvbduDQ0NuWGZTIacnJyPCZeIiL5AfOaMiIgIgJ+fHzIyMpCZmQlfX1+5afb29tDS0kJcXByqV68u98lt8dLU1AQAZGdnK7TcWrVq4d69e7h375407urVq0hMTIS9vb1U5vTp03LznTp1SuF1JCIi1caWMyIiIgDq6uq4du2a9P+36enp4bvvvsPIkSORk5ODhg0bIikpCcePH4e+vj4CAwNhYWEBmUyGPXv2oFWrVtDR0UG5cuXeu1wfHx84Ojqie/fuWLx4MbKysjBo0CB4e3vDw8MDADB8+HAEBQXBw8MDDRo0wB9//IErV67A2tq6+DcEERGVGLacERER/X/6+vrQ19fPd9rMmTMxefJkzJkzB7Vq1YKfnx/27t0LKysrAECVKlUwffp0jB8/HqamptItku8jk8mwe/duGBoaonHjxvDx8YG1tTU2b94slQkICMDkyZMxduxYuLu74+7duxg4cODHrzAREakU9tZIRERERESkAthyRkREREREpAKYnBEREREREakAdghSArKzs5GZmVnSYRAREREVSl1dHWXKlIFMJivpUIhKBSZnn9irV69w//598FE/IiIi+hzo6uqiUqVK0usiiEh52CHIJ5SdnY2bN29CV1cXxsbGvApFREREKksIgYyMDDx58gTZ2dmwtbWFmhqfiCFSJracfUKZmZkQQsDY2Bg6OjolHQ4RERFRoXR0dKChoYG7d+8iIyMD2traJR0S0ReNlz9KAFvMiIiI6HPB1jKiT4ctZyXMfcw6pdR7fl4vpdRLRERERETKwUshpZylpSUiIyPlxjVp0gS7du0CAEyZMgV//PFHoXWEhITg+vXrcuNu3bqFTp06wcrKCq6urnB2dsaYMWOQnp7+0TFHRUXB0tISAPDw4UM0atToo+ucNm0a0tLS5IaNjY3h4uICZ2dn1KlTBydOnPjo5eTn3e33119/YeTIkR9dr6WlJWrUqAEXFxfUqFEDc+fO/eg6VcmePXswYMCAkg5Dztv75oeKjY3FypUr5cbl9ztVxOHDh6GjowMXFxfp8/r164+KU5ne/g3ktz2U4e3fi4uLCzZv3ixNu3nzJry8vGBnZ4c6dergypUrSo+nMHv27EGTJk1KbPmKfifvHl8/1po1a+T2ZSMjI7Rv3x4AcODAAblplStXhpubGwAgLS0N7u7uSEpKKrZYiIiKG5MzKtSMGTPQvXv3Qsu8m1w8evQIDRs2hJ+fH2JiYnDhwgWcOHEC+vr6ePnyZZ75s7KyPji+ypUr49ixYx88f67p06fnOXno3r07IiMjcfHiRYwePRrDhw//6OXk593t17ZtWyxatKhY6t68eTMiIyMRHh6OOXPm4MyZM8VSL/Bx31txLHfChAmYMGFCicSgTMpKRmrUqIHIyEjpo8rPvb79G/iY7aHoPpr7e4mMjERAQIA0/ttvv0X//v1x48YNjBs3DkFBQUqPRZUp+p3kd3z9GL1795bbl83MzKS/U76+vnLT3NzcpGna2tro2bMnFixYUGyxEBEVNyZnVKigoCAsXrwYAPD333/DyckJLi4uqF27Nnbv3o3ffvsN586dw8iRI+Hi4oJ9+/bh559/RpMmTRAcHCzVU7ZsWUyePBlGRkYA3rTODRs2DJ6enmjRogWysrLg6+sLDw8PODg4oFu3bkhJSZHmnzZtGmxtbeHu7o5NmzZJ42NjY1G+fHlp+OzZs2jWrBk8PDzg6uqKrVu3ypWbOnUq3N3dUb16dezbtw8ApNaXRo0awcXFBQkJCXm2Q1JSEgwNDaXhAwcOwM3NDU5OTvD29sbVq1elafPmzYODgwMcHR3RvXt36SptUbdfSEgI/P39Abxp8ahduzYGDRoEZ2dnODg44Ny5c9KyfvnlF9jZ2cHNzQ0zZ84s8HnGKlWqoGbNmrh79y4AID4+Hp07d0bdunXh6OiISZMmSWVPnDgBFxcXODo6ok+fPnB2dsbhw4fz/d4AYP78+ahbty7c3Nzg5+cnLSO/9QWAH374AbVq1ZKubOeWL2ibHj58GA4ODggODoaLiwt27tyJY8eOoXz58rCwsJDbTgMHDoSTkxMcHR1x6dIlBAUFwdHREfXq1cODBw8AAJcvX0bDhg3h5uYGe3t7/PDDD9K69+vXD0OGDAEAPH/+HDY2Njh69Gi+2zRXQftm7jo1bNgQ7u7uqFu3LiIiIuTi7dWrF2rXrg13d3epZWzAgAGIjo6Gi4sL2rZtK9W1Y8cOeHp6wsrKSi5mZQoJCYGPjw+6du0Ke3t7eHl54erVq/jmm29Qq1YttGjRAq9evQIAhIWFwdPTE66urnBwcMDvv/8OAMjJyYGfnx/mz58PALh9+zaqVq2K6OjoQpeb+xvIb3vcvHkTrVu3Rp06deDk5IRly5ZJ88pkMkydOhV16tQpluQ9ISEB586dQ48ePQAAHTp0wL1793Dr1q33zvtuLIXte9OmTUNAQAC+/vpr2Nvbo1mzZnj+/DmAN51JDRo0CLa2tnL7Ua6CjjnTpk1D586d8fXXX8POzg5t2rRBVFQUfH19YWdnh65duyInJ6fA+F+/fo2AgADY29vD2dlZ+s3n95189913qFOnDlxcXNC4cWPp+83v+Pry5Uv069cPdevWhZOTE/r374+MjIwifR/vOn36NBISEuR+K7kePnyIsLAw9OzZUxrXpUsXrFq1iq+zISLVJeiTef36tbh69ap4/fq1NM7tu7VK+RSVhYWFsLOzE87OztKnbNmyYufOnUIIIQIDA8WiRYuEEEI4OTmJEydOCCGEyM7OFi9evBBCCOHt7S2VF0KIli1bioULFxa6XG9vb+Hr6ysyMjKEEELk5OSIp0+fSv8fMGCAmDNnjhBCiD179gh7e3uRlJQkcnJyRPfu3YWFhYUQQoiYmBhhYGAghBDixYsXwsXFRTx8+FAIIcSTJ0+Eubm5uH//voiJiREAxLZt24QQQvzzzz/Czs5OigeAtD5CCDF16lRhZGQknJ2dhaWlpahQoYI4e/asEEKIx48fiwoVKohLly4JIYTYsGGDqFWrlsjJyRH79u0TNWvWlOrq16+fGDBggELbb82aNaJdu3ZCCCEiIiKEurq6OHXqlBBCiBUrVogWLVoIIYS4fPmyMDMzE48ePRJCCDFlyhTx9k/awsJCXLhwQQghxLVr14SNjY1ISEgQQgjRokULcfjwYSGEEJmZmcLX11ds2bJFpKeni6pVq4rw8HAhhBDh4eECgIiIiMj3e/vjjz9E3759RVZWlhBCiHXr1olWrVoVuL7Pnz8XBgYGIjU1VQghREpKinj9+nWh2zQiIkLIZDIpXiGEmDFjhhg9erQ0nLudzp07J4QQYtKkSaJixYri2rVrQgghBg0aJL777jshhBDJyckiLS1NCCFEamqqcHFxESdPnhRCvPmNOjs7iy1btog2bdqI2bNni8IUtm/evn1b1K9fXyQlJQkhhLh586YwMzMTaWlpIiIiQgAQhw4dEkIIsXnzZlGjRg1pfZ2dneWWY2FhIYYOHSqEeLNf6+vri/v37wshhPjxxx/lfr9vf3bs2CFtn3LlyglXV1fh4eEhfv7550LXK9eaNWuEvr6+uHv3rhBCiB49eghra2sRHx8vhBCidevWYtmyZUIIIZ4/fy7tB8+ePRPVqlUT9+7dk2K2tLQUERERws3NTWzcuPG9y337N/D29sjKyhLu7u7Sd5uSkiIcHR3FmTNnhBBvfsvTp0+Xyl+/fr3A7RMUFCS3jR0dHUXt2rVFnz59pN/KuXPn5I4VQghRp04dERYW9t7t924she17U6dOFRYWFtJxMCAgQNr/li1bJpo1aybS09NFenq6aNKkifD29hZCiEKPOVOnThVWVlbi+fPnIicnRzRu3FjUq1dPJCcni8zMTOHs7Cz27NlTYPw7duyQjjdCvPlehcj7nQghpO0lhBB//vmn8PX1ldsObx9f+/XrJ9auffN3KicnRwQHB4sff/xRCFG0/flt/fr1E6NGjco3/lmzZon27dvnGW9lZSUuX75c4HpTXvmdvxCRcrBDEMLmzZvh4uIiDRf0LEPz5s0xfPhwdOzYES1atJCbpzCLFi3C2rVr8fz5c/z666/w8/MDAPTo0QMaGhoA3rxLZdGiRdi7dy+ysrKQlJQELy8vAG+uyHfu3Bn6+voA3txi9O+//+ZZzokTJ3Dnzh20bNlSbnx0dDSsra2hra0tPZfg6emJ27dvFxp39+7dpVbDsLAwtG/fHtHR0Th9+jQcHR3h6OgolRs8eDAePHiAQ4cOISAgQGrNGzhwIDp16vRR26969eqoV6+eFHduC0R4eDj8/PxgZmYG4E2rz4wZM+TmDQgIgJqaGqKjo7Fo0SIYGxsjJSUFYWFhePz4sVTu1atXiI6OxvXr11GmTBk0bdoUANC0aVPY2NjI1fn297Zr1y6cPXsW7u7uAN68yy9Xfuub+56cHj16oEWLFmjdujWqVq2K0NDQArcpAFhbW8Pb21uq+/79+6hevXqe7ZQbh4eHB6pXr46aNWsCAOrWrYudO3cCeNMaMGjQIERGRkJNTQ337t1DZGQk6tevD21tbWzduhUeHh7w9PTE+PHjC/1uCts39+/fj1u3bqFx48ZSeTU1NcTFxQF484xT8+bNAQCdO3dG//79ce/evQKX1a1bNwCAkZERrK2tERMTgypVqmDMmDEYM2ZMoXG6ubnh/v37MDAwwP3799GqVSsYGRmhc+fOhc4HvNnnqlWrBuDNds3MzISpqSkAoE6dOrh58yYA4NmzZwgODsaNGzdQpkwZPHv2DFFRUahatSqMjIywYcMGNG3aFEFBQejatet7l1uQ6OhoXLlyBV26dJHGvXz5ElevXkWdOnUAAH369JGm5d7O+T5Hjx5FtWrVkJmZiUmTJiEwMFBqXf8Yb8dS2L4HAH5+fqhYsSKAN9v98uXLAN7sZ7169ZJeANynTx+pZbKwYw4AtGjRQmr1d3Nzg5aWFvT09AAArq6u0veXH2dnZ1y7dg2DBg2Ct7c3WrVqVWDZ0NBQLF26FC9fvkROTo7U6pefXbt24eTJk1i4cKG0XdTV1QGgSPtzrpSUFGzatAmnTp3KM00IgdWrV+Onn37KM83MzAz3799H7dq1i7QcIqJPickZFdnChQtx5coVREREIDAwEN27d8fYsWPzlHN1dZV7tmnkyJEYOXIkmjRpIvfcQbly5aT/b9y4EeHh4Thy5Aj09fXx008/ITw8PN84Crp1TwgBBweHfDvuiI2NhZaWljSvurq6XCLxPs2bN0daWhqioqKKPM+7sRZ1+73r7XfKqKurF/jsSn7bJTfxPnToEL7++ms0a9YMVlZWAIBTp07leV/NpUuX3lvv29+bEAITJkxA//7988xX0PqeOnUKJ06cwOHDh1G/fn38+eefhax93mUCgK6ubp5nWN7dTgVtt++//x5GRka4cOECypQpg/bt28vVFR0djbJlyyIhIQEZGRnQ0tJ6b3y53t5WQgh89dVX2LhxY55yuUnnu/MW9pqNgtZn3rx5BXbaM3XqVHzzzTdS8ggAVatWRdeuXXHs2LEiJWdF3a4DBgxAq1atsH37dshkMri5uclt1wsXLqBixYp48OABhBAf/EoRIQQqVKhQaML19v4SHR0t9/zY21xdXbFmzRoAkBJQDQ0NjBgxAnZ2dgAAc3NzPHr0CFlZWShTpgyEEIiLi5PKv8/bsbxv3/uY33pB04r6/eXH2toaV69eRXh4OA4dOoSxY8fmu93j4uIwZMgQnD17FjY2Nrh06ZLcRYl3CSGwfft2aRu/rSj7c66tW7fCwcEB9vb2ecoeOXIEaWlp8PX1zTMtLS1NpZ+5JKLSjc+cUZFdv34dDg4OGDJkCAYOHChdrdTX15fr/Wrw4MEICwtDSEiINC4nJ6fQB8JfvHgBIyMjqdOQt+f18fHB1q1b8fLlSwgh8Ouvv+Zbh5eXF2JiYnDo0CFpXGRkZJGeZdDT0yu0B6+LFy/i1atXsLS0RP369XH58mUpUdu0aROqVKmCKlWqwMfHB1u2bEFycjKAN8+E5T6nUdTtV1RNmzbFgQMHpGfkcq+k58fHxwcDBw7EpEmTUK5cOTRt2lSu98aHDx/i/v37qFGjBjIzM3HkyBEAb05wCnu2xt/fHytXrpR7NubChQsFru/Lly/x+PFjNGrUCJMnT0bDhg1x4cKFQrdpfpycnAp9ZqkwL168QNWqVVGmTBlER0cjNDRUmhYXF4dBgwbh0KFDqF+/PkaMGFFoXYXtm76+vjh06JBcwvv2RYvY2Fjp2aFt27bB1NQUVatWVXh/GDNmjFwHCG9/ck9kHz16JD1b9PLlS+zZsweurq4A3iSKuS2MH+PFixewsLCATCbD0aNHcfHiRWnaf//9h/nz50v7xo8//ljket/dHjVq1IC+vr6UVAFveoctqKXm3Y5Q3v7k1pGSkoLExERpnj///FPaPiYmJnBzc8OGDRsAANu3b0fVqlWllttevXpJrbLvU9i+VxgfHx9s2LABmZmZyMjIkFv3wo45H+v+/fuQyWRo27Yt5s+fDyEE7t27l+c7SUpKgoaGBipVqgQhhNwzgEDe46u/vz/+97//SYnhixcvpONMUfbnXL///rvcs83vTgsKCpJa5HJlZ2fj9u3bUis9EZGqYctZCfuc3kf2/fffIzo6GpqamtDV1cWKFSsAAP3798fo0aOxaNEizJ49G61atcKxY8fw/fffY9q0aahYsSK0tLTg7e1dYLf3vXr1wu7du1GjRg0YGxujUaNGUkcRrVq1wpkzZ+Dm5gZ9ff08ty3mMjQ0xN69e/Hdd99h9OjRyMzMRLVq1aTXAhRm9OjR+Oqrr6Crq4uDBw8CAP744w8cPnxYusq/fv16GBsbS9N69eqFrKwsGBoaYuvWrZDJZGjZsiWioqLg6ekJNTU1ODk5Yfny5Qptv6LK7cijQYMG0NPTg5+fHwwMDAosP3nyZFSvXh3nz5/HH3/8gVGjRqF27dqQyWQoW7YsfvnlF1StWhWbNm3C4MGDkZOTA3d3d9SoUUOu05W3de/eHc+ePZNug8zKykKfPn3g6uqa7/omJSWhY8eOSElJgUwmg62tLQIDA2FgYFDgNs1PmzZtMGPGDGRnZ+c5+XqfSZMmoWfPnli7di1sbGzQrFkzKfYuXbpg5syZsLe3x6JFi+Dl5YXNmzcX2PJS2L5ZvXp1bNy4Ed9++y1SU1ORkZEBV1dXqSXNwcEBISEhGDZsGDQ1NfHnn39CJpPByckJDg4OqF27NqytrfHXX38ptH752b59O1asWIEyZcogKysLnTp1Qu/evQG8Sc7KlPn4PwVz587FoEGDMHPmTLi4uEi34iYnJ6NLly5YvXo1zMzMsG7dOtStWxcNGzZEgwYN3ltvfttjz549GDFiBBYtWoTs7GwYGRnl20JZVI8fP0aHDh2QnZ0NIQSsra2xbt3/vYPyl19+QVBQEGbPnp0nMTx37hyGDRtWpOUUtO+9T79+/fD/2rvzsKqqxeHj3wMoREjhGM4DTgyHAzIIyZiBaJJToRGIGF3EskwL9WpiZnmxxKvcyvuqpKLZVdGszG5OIY7o9ahEkho45FUMiEFBOLDeP3jYP4+cA2gOdFuf5znPwzl777XW3mvvxV57DTsrKwt7e3tsbGzw8fHh2LFjAA2WOb/XqVOnmDlzJkIIdDodERERqNVqdDpdvTwZO3YsDg4OtGnTRpnMpc7t5WtSUhIzZsxAo9FgYmKCmZkZiYmJ9boqNyQnJwetVmuw62lxcTFpaWlKt9BbZWRk4O7uTuvWre/4eEiSJD0IKiHklEUPSkVFBbm5ufTo0aNedzJJuhulpaXK+JG///3v7Nixg2+++eaehZmZmUloaCjnzp3D0tLyd6f3Xpo8eTL+/v5642v+KPbu3cvrr7/+u95ddq8sWrQIW1tbZTZCqemuXbvGCy+80OQWMOnhGzt2LBMnTuTpp59+2En5Q5H3L5L04MiWM0n6A5sxYwb79++nqqqKjh07snz58t8d5ubNm0lKSkIIgZmZGWvXrm12FTOofQff762ISjR58gWpvnbt2smK2R9IRUUFfn5+smImSVKzJlvOHiD55EmS/pjc3NzqTZzg4OBgdOICqXH5+fkGx0Y9/fTTLFq06CGk6M8rNjbW4IyHBw8elBNnSIC8f5GkB0lWzh4gWbhJkiRJkvRHI+9fJOnBkbM1SpIkSZIkSZIkNQOyciZJkiRJkiRJktQMyMqZJEmSJEmSJElSMyArZ5IkSZIkSZIkSc2AnEr/IbvwjtN9Cbfr2/VfvilJkiRJkiRJUvMlW87+5Lp37270RbgbNmzA3d2d3r174+bmho+PD5s3b1aWq1QqnJyc0Gg09OvXj1dffZXq6moAPv30U1QqFUlJSXph+vn5oVKp+O233wDw9/enR48eaDQa+vbty9SpU6mpqbkv+/ownDhxgmHDhj3sZOgpKytDpVL9rjB+++03Fi5cqPebv78/W7duvesw8/LyMDU1RaPRKJ9z5879rnTeS0uWLOHKlSvK908++eSeT/m+detWg1OaPwhRUVF06tRJOfa3vv/sxo0bjBs3Djs7O/r06cOmTZvuWzo0Gg2lpaUNrpOXl8fjjz9+39JwqylTptC9e3dUKlWzeGn4V199hb+//0OLPy8vj08++aTJ6yckJFBRUXHP4k9JSdErI9q2bcuoUaMA+Pbbb/WWdezYEVdX13sWd1Pc+v+tuSkrKyM4OJi2bdvWu36uXr2Kh4dHvVeGSJL04MnKmWTQihUrSEhIYPXq1Zw5c4ajR4+yYsUKfv75Z7319u3bh1ar5eTJk6Snp7Njxw5lmYuLC6tXr1a+nz17lvLy8npxJSUlodVqyczM5IsvvrinN34P6x9NXbwzZ85kxowZDyUN95Ohytm90KpVK7RarfLp1avXPY/jbt1eOYuNjb3nL3C+28pZTU3NPXmo8eabbyrH/taK5wcffIC5uTlnz57l22+/JS4ujoKCgt8dnyFarZZWrVrdl7DvxpgxY8jIyKBbt253Hcb/0g3vnVbO5s2bd08rZxMmTNArI5544gnCw8MBCA4O1lvm6uqqLLvf/gh53KJFC+Lj49m5c2e9ZR06dMDb25s1a9Y8hJRJknQrWTmTDEpISGDJkiXY29srv/Xt29fozWh5eTk3b97ExsZG+a1r1660a9eOzMxMAFatWsWECROMxmltbY27uzvnz58HoLS0lJiYGDw8PFCr1bz88stUVlYCcPr0aby8vHBwcGDUqFEEBQXx6aefArUtANHR0fj6+uLo6AjA2rVr8fT0xNXVFV9fX06cOAHAoUOHGDBgABqNBkdHRz7++GOgtnJqb2+PRqPBycmJw4cPA3D06FG8vb1Rq9V4eHiwf/9+4P+e5MfHx+Pq6kpycjIXLlzghx9+wMfHR2+dOXPm4OrqSu/evdm/fz9Tp05V4s/KygLgypUrBAQEMGDAABwcHHjllVeUm+8FCxYQGhqKEIKbN28yYMCARl+GvHz5cnr37o2Li0u91szMzEwCAwNxc3PDxcWFjRs36qV3+vTpqNVqHBwclH/qsbGxlJaWotFocHNzU8LKyMjAx8eHXr16ERsb22Ca7pW9e/fi6OhIXFwczs7OODg4cPTo0Qa3qaqqYsaMGXh4eKDRaHj++ecpKioCDOf9O++8w+XLlwkLC0Oj0aDVaklISOD1118HaluKBw8ezLhx47C3t8fb25vs7GxGjhxJ//79CQoKoqysDIBdu3bh5eWFi4sLDg4OrFy5EoDt27ezbds2Fi1ahEajYcWKFQAsWrQIBwcHnJycCA8Pp7i4GKi9RkePHk1wcDCOjo7897//5ZVXXqF///44OzszYMCAe3ZT/Pnnnyv52aNHD/z9/dmyZUuj2/n7+zN9+vQ7OidubXkwdr3VMXRuXrt2jaCgIJycnFCr1Q2WOU3h6+tL586d73g7lUrF3LlzcXd3Z+bMmZw6dYpBgwbh6uqKvb097777rrJuQkICYWFhDB8+HHt7ewIDAyksLARqz9W4uDh69+6Nh4cHe/bs0YunofPj+eefZ/jw4fTp04dnnnmGrKwsgoOD6dOnD+PGjWuwQl9eXk5YWBj29vY4OzsrLwyPjY0lJycHjUZDaGgoUJsP7u7uaDQafH19ycnJUdYF8PHxQaPRkJ+f32C5fqcOHz5Mfn6+ko5bXb58mV27dhEREdFoODExMXzwwQfK99zcXJ544gmqqqoaLCsM/a+B2ocZLi4u9OnTR69s/vbbb3F1dUWtVuPn50d2djYAZ86c4cknn8TZ2RknJydmz54NNFxO3Q1zc3MCAwONtjqPGzeO5cuX33X4kiTdI0J6YMrLy0V2drYoLy9Xfjs/z/G+fJqqW7du4vjx43q/Xb16VQCisLCwwW0B4ejoKNRqtbC0tBQRERHKspSUFPHss8+KdevWidjYWKHT6USvXr1EUVGRAERRUZEQQgg/Pz+xZcsWIYQQly9fFn379hXZ2dlCCCFiYmLE6tWrhRBC1NTUiIkTJ4rExEQhhBBubm5i1apVQgghsrOzhbm5uUhJSRFCCDF+/HihVqtFSUmJEEKIjIwMERISIioqKoQQQqSnpwt7e3shhBChoaFi/fr1Srrr9tna2lpcvnxZCCFEZWWlKC0tFTdv3hRdunQRO3bsEEIIsW/fPtGhQwdRWloqcnNzBaCkVwgh1qxZI0aPHq18r1unbn9XrFghHn30UbF7924hhBCJiYlizJgxQojac6W0tFQIIYROpxPDhg0Tn332mXIshgwZIhYtWiTi4uLEyy+/3GA+nTp1SnTo0EHZn5kzZ4q6S7+oqEhoNBpl2bVr10SXLl3EpUuXlPSuWLFCCCHEwYMHRbt27URJSYnIzc0Vjz32mF48fn5+YsSIEaKqqkrcuHFDdO/eXRw4cEAIIURqaqpwdnY2+ElOTlaOj5mZmXBzcxMuLi5i3rx5QqfTNbhvQgixZ88eYWpqKg4dOiSEEOLjjz8WQUFBDW6zYMEC8c477yjf33nnHREXFyeEMJz3QtS/VubOnStee+01IUTt+W5tbS3Onz8vhBDixRdfFD179hRXrlwRQggxbNgwZT8LCwuV/SooKBBdu3YVFy9eFELUnrtJSUlKHNu3bxf9+vVTrpeYmBgRGxurxG9ra6vE8Z///Ef069dPVFdXCyGE+O2335S/Bw0aZPT416Vl/Pjxonv37sLJyUkMGzZMb1+trKyUYyKEEG+++aaYM2dOg8dYiIbPCWPqyoemXG+Gzs3FixfrXRMFBQVCCCFOnz5t9BhERUU1ui+GysrG9mPevHnK95KSEqUMunHjhtBoNOLgwYNCiNq87Natm/j111+FEEKEhYWJ9957TwghRHJysggMDBQ3b94UN2/eFP7+/sLPz08I0fj50aNHD1FYWChqamqEr6+v8PT0FCUlJaKqqko4OzuLr776ymj609LS9K6juuO4Z88e4ezsrLdufn6+8vdnn30mgoOD9Y5DXfrq0misXE9MTDSaR2lpafXSGBMTI9544w2D6V+wYIEYNWqU0f271f79+4WDg4Py/e2331bCbaisuP1/Td3+zp49WwghxLlz54SNjY3Izc0VV69eFa1btxYnT54UQtSWif379xc1NTViypQpSn4L8X/HuqG4m1KmGmOo/BZCiKqqKmFhYSGKi4vrLTN0/yJJ0v0hJwSRmiQgIIBff/2VyspK5ako1HZrfPzxx7lx4wajR49m2bJlvPrqq8ryUaNGMWvWLLZs2YKnp6fBJ3ZTp05l9uzZ5OTkKE/+obaL18GDB1m8eDFQ+yTX1NSUkpIStFotkZGRAPTv359Bgwbphfncc88pXaO++OILTpw4gaenp7K8sLCQ8vJyAgICmD9/PmfOnCEwMFAJ56mnniIiIoLhw4cTEhJCnz59OHXqFCYmJgQHBwMwaNAgOnTogFarpXPnzrRo0YIXX3xRiePSpUt06NBBL10WFhaMGDECADc3N6ysrAgICADAw8NDecpaU1NDfHw8GRkZCCHIz8/H0dGRsWPHolKpSE1NxcXFBRsbG6VVz5jdu3cTEhKCra0tAJMmTeL9998H4MCBA/z888+EhITobZOTk0PPnj0xMzMjKioKgIEDB9KxY0eOHz9O165dDcYVFhaGmZkZZmZmypgxLy8vwsPDG+1eZGtryy+//EL79u0pLCwkLCyMDz/8kLfeeqvB7QDs7OyU/PXy8tJ7Cm7I1q1bKS4uVsZQVlZW0r17d8Bw3jeFl5eXclzc3NyoqqpS8t/d3Z0zZ84AUFBQwMSJE/npp58wMzOjoKCArKwsg60zO3fuJCwsTLluJk2axHPPPacsHzp0qBJHz5490el0REdHExAQwLBhwzAxqe0csW/fvkbTv2DBAmxtbTExMWHLli2EhIRw5swZrKysmrT/xhg7JxqTk5PT4PVm7NwcOHAgSUlJTJs2DV9fX4YMGQLUtvw/6DFj0dHRyt/l5eXExcWh1WoxMTHh4sWLaLVaBg4cCMCQIUNo06YNUHsunTpVO6nTrl27iIyMpGXLlkqYda2tjZ0fQUFBSm8GV1dXzM3NlXLRxcVFOScNcXZ25scffyQuLg4/Pz+GDh1qdN3vvvuOZcuWUVpaSk1NjdLqZ4ixch1qu9U2tavw9evX2bBhg8FuwEIIVq1axdKlS5sUlre3NzqdjszMTNzc3FizZg1ffvmlkl5jZQXo/6+p89JLLwG116Svry/p6enY2Njg5OSEk1PtJGDh4eFMnjyZX375BV9fX958803Kysrw8/Nj8ODBjcbdlDL1TpmZmWFjY8Ply5extra+p2FLktR0snIm1dO+fXs6derEkSNHlBujPXv2kJeXh0ajMbiNpaUlw4cP5+uvv9arnFlYWBASEsKkSZPYsGGDwW2TkpIYMWIEJ0+exMfHh6CgIEJCQhBCsHnz5no3xyUlJfXCuH2Ci1tvKIUQjB8/nvfee6/edq+//jrPPvssO3fuZNasWTg6OvLRRx+xefNmjh07xt69exk6dCjvvvsuDg4ODcZraWmp3AzXfb+9W5m5ubnyt6mpKRYWFnrf68YtLF68mPz8fA4fPoyFhQVvvPGGXljnz5+npqaG0tJSrl+/rhdOY25NsxACBwcHDhw4UG+9vLy8Rre/nbH9WbdundHJM2JiYpg8eTLm5ua0b98egNatWxMdHc369eubVDkzFq8xQgiWLVumdNW6laG8Hzt27B2nwViaYmNjGTp0KJs3b0alUuHq6trk7ocNneePPfYYWVlZfP/99+zZs4eZM2eSnp6OnZ0dPj4+RifZOHbsGKampnTq1En5beTIkcyYMYOcnBwGDBhA165dOX/+vFLBz8vLM3jsDLnTvGlIYxPZqFQqvLy80Gq17Ny5k7S0NObMmcPx48c5e/YsYWFhBrdzcXEhJSWFNWvWKJWG11577Xd3ibw1f2bNmkXbtm05fvw4ZmZmjBo1Si/fm3qcGjoGty9r6jlpSM+ePcnOzmb37t3s3LmTt956y2Dl9sKFC7zyyitkZmbSq1cvTp48ia+vr9FwjZXrUNtF01gX7blz5zJy5Ejl+8aNG3FwcNDrel/n+++/p6KiQvn/1RQTJkwgJSWFsrIy2rZtq3RTbKisAJr08KKx83b06NF4e3vz3XffkZyczJIlS9i+fXuDcTelTJ0yZQrp6elAbdf+uophQyoqKnjkkUcaXU+SpPtHjjmTDHr77beZOnUqp0+fVn67fv260fWrq6vZu3cvffv2rbfsjTfeID4+nsDAwAbjVKvVzJ8/n1mzZiGEYMSIEfztb39TbiCKioo4e/Ys1tbWODs7k5qaCtQ+Yc/IyDAabmhoKKmpqVy4cAGobZWqG5OUk5NDjx49iImJYdasWRw6dAidTse5c+dwc3Nj+vTpjBkzhiNHjtC3b19qamr47rvvgNpWpytXrhitsKrVar1WxjtRVFTEE088gYWFBVeuXFHGgUFt5XTs2LGsXbuW2NhYIiMjEUIYDSswMJAdO3Yok1ncOpjf29ub3NxcvQHiWq1WGQOi0+lYu3YtAEeOHOHy5ctoNBqsra0pLy9v8liR8PBwvYH6t34mT54MQH5+PlVVVQDcvHmTtLQ0XFxclDD69evHL7/80qT4GjNixAiSkpK4ceMGUDsb4Q8//GA076F2TGTdeJ7fo6ioiG7duqFSqUhPT1fGPxqKY/DgwfzrX/9SHkgsX77c6E3itWvXuH79OkFBQbz33nt0795dGdNSN3GPoU9dq8WlS5eUsA4dOkRBQQF2dnZAbetA3XmTm5vL3r17lRbg5ORkZs6c+buPy+0au96MnZu5ublYWVnx/PPPs2zZMn766SfKysqUljNDn5SUFAAiIyOV35pSMYuMjGzS2Duozfe6Fr+cnBxlvxozePBgUlNTqaqqorKyUklr3bKmnh936tKlS6hUKkJDQ/nggw8QQnDx4sV652hxcTEtWrTA1tYWIQTJycl64bRq1UpvfWPlOuhPSHP759aKGcDKlSuZOHGiwbSvXLmSqKgo5dyu89RTTynX8+0iIiLYuHEjn3zyiV6Lp7GyoiF1eZSXl8e+ffvw8fFh4MCBnDp1ShlXvGHDBjp16kSnTp04c+YMHTp0IDIyksTERKU1sKG4m1KmLl26VPmtKRWzq1evolKp6NKlS6PrSpJ0/8iWs4esObyPLDg4mBYtWijfDx06xMsvv8yjjz7Kiy++SHFxMe3atcPCwoJ//OMfetv6+PhgampKZWUlzs7OzJ07t174vXv3Zvr06U1Ky6RJk0hOTiYtLY2kpCRmzJiBRqPBxMQEMzMzEhMTsbOzY82aNURHR7No0SLs7Oxwd3c3OsjZx8eHxMRERo4ciU6no7KykmHDhuHm5kZycjK7d++mZcuWmJqa8uGHH1JdXU10dDSFhYWYmZnRrl07UlJSaNmyJWlpaUyZMoVp06ZhYWHBpk2bsLKy4tdff60X76BBg7h06RKFhYW0bt26Sftf57XXXmPMmDE4ODjQsWNHpZsLwMSJEwkPDycgIAB/f3/S09NJTEwkPj7eYFiOjo4kJCTg4+ODlZWVMu00gI2NDV9//TXTp09n2rRpVFVV0bVrV2VK/LrWGGdnZ3Q6HevXr1e68ERGRqJWq7Gysmp0Ao6myMjI4O2331ae6AcGBvLXv/4VqK24FRQU3PFxNCY+Pp6bN2/i6empPNWOj4/Hzs7OYN5D7ZTqMTExWFpaKpPP3I2FCxcSFxfH/Pnz0Wg0et1tIyIiiIqKYuvWrUyePJmXXnqJrKwsvLy8MDExQa1W89FHHxkM9+LFi8TExFBVVUV1dTVPPvlkve6qDYmKiuLq1auYmpryyCOPsHHjRh577DGg9qY5OjqaXr16YWpqSnJyMm3btgUgOzubnj173vXxMESlUjV6vRk7Nzdt2sTixYuV82jRokXKftyNv/zlL3z99ddcuXKF4OBgWrVqpVQmjh49ypQpU5oUzuzZs4mIiGD16tX06tWr0YdVdWJiYsjKysLe3h4bGxt8fHw4duwYACEhIU0+P+7UqVOnmDlzJkIIdDodERERqNVqdDodDg4OODo60rNnT7Zt28bYsWNxcHCgTZs2SqW9zrRp03j66aextLTk3//+d4PlelPl5OSg1WrZvn17vWXFxcWkpaUp3ULrVFdXc+LECaOTu3Ts2BEPDw+2bdumNymGsbLCUE+KW+NycXHh+vXrLF26VOmKuG7dOiIjI9HpdNjY2LBx40ZUKhWbNm0iNTWVli1bUlNTozwIuZu4G6NWq7l27RolJSV07tyZgIAA5SHHjh07GDlypF4PEEmSHjyVaOiRu3RPVVRUkJubS48ePe6oG5pUX1lZGY8++igqlYrc3Fy8vLzIzMxsdk/86rqd3Osp1x+Eum6szeGdPRs3biQnJ0eZxUxqPgYNGsQ333xzT6a/z8/Pp0uXLpSXlzf7G8Rr167xwgsvNLkFTHq4MjMzWb58uTILqlSfj48P//znP5Vx37eS9y+S9ODIljPpD+nAgQNKhae6upqkpKRmVzGD2hawusH70t27dZIDqXlpqEvxncjMzCQsLIyEhIRmXzEDaNeunayY/YG4u7vj7u7+sJPRbF29epVJkyYZrJhJkvRgyZazB0g+eZLup9DQUGVcXR0bG5t670X6s9BqtcpsfrcaP348U6dOffAJkhSxsbEGZ9k7ePCgnIzgAZN5ITWFvH+RpAdHVs4eIFm4SZIkSZL0RyPvXyTpwWn+fUckSZIkSZIkSZL+BGTlTJIkSZIkSZIkqRmQlTNJkiRJkiRJkqRmQM7W+JA9uezJ+xLu/lf335dwJUmSJEmSJEm6P2TL2Z9c9+7d0Wq1Bpdt2LABd3d3evfujZubGz4+PmzevFlZrlKpcHJyQqPR0K9fP1599VWqq6sB+PTTT1GpVCQlJemF6efnh0qlUt6d5e/vT48ePdBoNPTt25epU6dSU1NzX/b1YThx4gTDhg172MnQU1ZWprzQ9G799ttvLFy4UO83f39/5eXVdyMvLw9TU1M0Go3yOXfu3O9K5720ZMkSrly5onz/5JNPlPfY3Stbt241OHPegxAVFUWnTp2UY3/ru/lu3LjBuHHjsLOzo0+fPmzatOm+pUOj0VBaWtrgOnl5eUZfOv97TZkyhe7du6NSqYyWjQ/SV199hb+//0OLPy8vT3kpclMkJCRQUVFxz+JPSUnRKxPatm3LqFGjAPj222/1lnXs2BFXV9d7FndT3Pr/rLkpKysjODiYtm3b1rterl69ioeHBzqd7uEkTpIko2TlTDJoxYoVJCQksHr1as6cOcPRo0dZsWIFP//8s956+/btQ6vVcvLkSdLT09mxY4eyzMXFhdWrVyvfz549S3l5eb24kpKS0Gq1ZGZm8sUXX9zTG7+H9Y+nLt6ZM2cyY8aMh5KG+8lQ5exeaNWqFVqtVvn06tXrnsdxt26vnMXGxt7zl4vfbeWspqbmnjzUePPNN5Vjf2vF84MPPsDc3JyzZ8/y7bffEhcXR0FBwe+OzxCtVntPXmh9t8aMGUNGRgbdunW76zD+l25477RyNm/evHtaOZswYYJemfDEE08QHh4OQHBwsN4yV1dXZdn99kfI4xYtWhAfH8/OnTvrLevQoQPe3t6sWbPmIaRMkqSGyMqZZFBCQgJLlizB3t5e+a1v375Gb0bLy8u5efMmNjY2ym9du3alXbt2ZGZmArBq1SomTJhgNE5ra2vc3d05f/48AKWlpcTExODh4YFarebll1+msrISgNOnT+Pl5YWDgwOjRo0iKCiITz/9FKhtAYiOjsbX1xdHR0cA1q5di6enJ66urvj6+nLixAkADh06xIABA9BoNDg6OvLxxx8DtZVTe3t7NBoNTk5OHD58GICjR4/i7e2NWq3Gw8OD/ftru4/WPcmPj4/H1dWV5ORkLly4wA8//ICPj4/eOnPmzMHV1ZXevXuzf/9+pk6dqsSflZUFwJUrVwgICGDAgAE4ODjwyiuvKDffCxYsIDQ0FCEEN2/eZMCAAaxbt67B/Fy+fDm9e/fGxcWlXmtmZmYmgYGBuLm54eLiwsaNG/XSO336dNRqNQ4ODso/+djYWEpLS9FoNLi5uSlhZWRk4OPjQ69evYiNjW0wTffK3r17cXR0JC4uDmdnZxwcHDh69GiD21RVVTFjxgw8PDzQaDQ8//zzFBUVAYbz/p133uHy5cuEhYWh0WjQarUkJCTw+uuvA7UtxYMHD2bcuHHY29vj7e1NdnY2I0eOpH///gQFBVFWVgbArl278PLywsXFBQcHB+Ul5du3b2fbtm0sWrQIjUbDihUrAFi0aBEODg44OTkRHh5OcXExUHuNjh49muDgYBwdHfnvf//LK6+8Qv/+/XF2dmbAgAH37Cb5888/V/KzR48e+Pv7s2XLlka38/f3Z/r06Xd0TtzaEmHseqtj6Ny8du0aQUFBODk5oVarGyxzDPH19aVz5853tE1duufOnYu7uzszZ87k1KlTDBo0CFdXV+zt7Xn33XeVdRMSEggLC2P48OHY29sTGBhIYWEhUHtuxsXF0bt3bzw8POq9p7Ch8+H5559n+PDh9OnTh2eeeYasrCyCg4Pp06cP48aNa7ACX15eTlhYGPb29jg7OxMUFATUXus5OTloNBpCQ0OB2uPu7u6ORqPB19eXnJwcZV0AHx8fNBoN+fn5DZbjd+rw4cPk5+cr6bjV5cuX2bVrFxEREY2GExMTwwcffKB8z83N5YknnqCqqqrBssHQ/xaofXjh4uJCnz599Mrib7/9FldXV9RqNX5+fmRnZwNw5swZnnzySZydnXFycmL27NlAw+XS3TA3NycwMNBoK/O4ceNYvnz5XYcvSdJ9IqQHpry8XGRnZ4vy8nLlN++l3vfl01TdunUTx48f1/vt6tWrAhCFhYUNbgsIR0dHoVarhaWlpYiIiFCWpaSkiGeffVasW7dOxMbGCp1OJ3r16iWKiooEIIqKioQQQvj5+YktW7YIIYS4fPmy6Nu3r8jOzhZCCBETEyNWr14thBCipqZGTJw4USQmJgohhHBzcxOrVq0SQgiRnZ0tzM3NRUpKihBCiPHjxwu1Wi1KSkqEEEJkZGSIkJAQUVFRIYQQIj09Xdjb2wshhAgNDRXr169X0l23z9bW1uLy5ctCCCEqKytFaWmpuHnzpujSpYvYsWOHEEKIffv2iQ4dOojS0lKRm5srACW9QgixZs0aMXr0aOV73Tp1+7tixQrx6KOPit27dwshhEhMTBRjxowRQtSeK6WlpUIIIXQ6nRg2bJj47LPPlGMxZMgQsWjRIhEXFydefvnlBvPp1KlTokOHDsr+zJw5U9Rd+kVFRUKj0SjLrl27Jrp06SIuXbqkpHfFihVCCCEOHjwo2rVrJ0pKSkRubq547LHH9OLx8/MTI0aMEFVVVeLGjRuie/fu4sCBA0IIIVJTU4Wzs7PBT3JysnJ8zMzMhJubm3BxcRHz5s0TOp2uwX0TQog9e/YIU1NTcejQISGEEB9//LEICgpqcJsFCxaId955R/n+zjvviLi4OCGE4bwXov61MnfuXPHaa68JIWrPd2tra3H+/HkhhBAvvvii6Nmzp7hy5YoQQohhw4Yp+1lYWKjsV0FBgejatau4ePGiEKL23E1KSlLi2L59u+jXr59yvcTExIjY2FglfltbWyWO//znP6Jfv36iurpaCCHEb7/9pvw9aNAgo8e/Li3jx48X3bt3F05OTmLYsGF6+2plZaUcEyGEePPNN8WcOXMaPMZCNHxOGFNXPjTlejN0bi5evFjvmigoKBBCCHH69GmjxyAqKqpeOgyVjY2le968ecr3kpISpcy5ceOG0Gg04uDBg0KI2rzr1q2b+PXXX4UQQoSFhYn33ntPCCFEcnKyCAwMFDdv3hQ3b94U/v7+ws/PTwjR+PnQo0cPUVhYKGpqaoSvr6/w9PQUJSUloqqqSjg7O4uvvvrKaPrT0tL0rpu647Znzx7h7Oyst25+fr7y92effSaCg4P1jkNd+urSaKwcT0xMNJonaWlp9dIYExMj3njjDYPpX7BggRg1apTR/bvV/v37hYODg/L97bffVsJtqGy4/X9L3f7Onj1bCCHEuXPnhI2NjcjNzRVXr14VrVu3FidPnhRC1JaB/fv3FzU1NWLKlClKfgvxf8e6obibUoYaY6i8FkKIqqoqYWFhIYqLixs9ZobuXyRJuj/khCBSkwQEBPDrr79SWVmpPCWF2m6Njz/+ODdu3GD06NEsW7aMV199VVk+atQoZs2axZYtW/D09DT4BG/q1KnMnj2bnJwc5ck/1HbxOnjwIIsXLwZqn+yamppSUlKCVqslMjISgP79+zNo0CC9MJ977jmla9QXX3zBiRMn8PT0VJYXFhZSXl5OQEAA8+fP58yZMwQGBirhPPXUU0RERDB8+HBCQkLo06cPp06dwsTEhODgYAAGDRpEhw4d0Gq1dO7cmRYtWvDiiy8qcVy6dIkOHTropcvCwoIRI0YA4ObmhpWVFQEBAQB4eHgoT11ramqIj48nIyMDIQT5+fk4OjoyduxYVCoVqampuLi4YGNjo7TqGbN7925CQkKwtbUFYNKkSbz//vsAHDhwgJ9//pmQkBC9bXJycujZsydmZmZERUUBMHDgQDp27Mjx48fp2rWrwbjCwsIwMzPDzMxMGTPm5eVFeHh4o92NbG1t+eWXX2jfvj2FhYWEhYXx4Ycf8tZbbzW4HYCdnZ2Sv15eXnpPxQ3ZunUrxcXFyhjKyspKunfvDhjO+6bw8vJSjoubmxtVVVVK/ru7u3PmzBkACgoKmDhxIj/99BNmZmYUFBSQlZVlsLVm586dhIWFKdfNpEmTeO6555TlQ4cOVeLo2bMnOp2O6OhoAgICGDZsGCYmtZ0j9u3b12j6FyxYgK2tLSYmJmzZsoWQkBDOnDmDlZVVk/bfGGPnRGNycnIavN6MnZsDBw4kKSmJadOm4evry5AhQ4Dalv/7PYYsOjpa+bu8vJy4uDi0Wi0mJiZcvHgRrVbLwIEDARgyZAht2rQBas+dU6dOAbUtq5GRkbRs2VIJs651tbHzISgoSOm94Orqirm5uVIOuri4KOegIc7Ozvz444/ExcXh5+fH0KFDja773XffsWzZMkpLS6mpqVFa/QwxVo5DbTfapnYNvn79Ohs2bDDY7VcIwapVq1i6dGmTwvL29kan05GZmYmbmxtr1qzhyy+/VNJrrGwA/f8tdV566SWg9hr09fUlPT0dGxsbnJyccHJyAiA8PJzJkyfzyy+/4Ovry5tvvklZWRl+fn4MHjy40bibUobeKTMzM2xsbLh8+TLW1tb3NGxJku6erJxJ9bRv355OnTpx5MgR5cZoz5495OXlodFoDG5jaWnJ8OHD+frrr/UqZxYWFoSEhDBp0iQ2bNhgcNukpCRGjBjByZMn8fHxISgoiJCQEIQQbN68ud7NcUlJSb0wbp/g4tYbSiEE48eP57333qu33euvv86zzz7Lzp07mTVrFo6Ojnz00Uds3ryZY8eOsXfvXoYOHcq7776Lg4NDg/FaWloqN8N132/vVmZubq78bWpqioWFhd73unEMixcvJj8/n8OHD2NhYcEbb7yhF9b58+epqamhtLSU69ev64XTmFvTLITAwcGBAwcO1FsvLy+v0e1vZ2x/1q1bZ3TyjJiYGCZPnoy5uTnt27cHoHXr1kRHR7N+/fomVc6MxWuMEIJly5YpXbduZSjvx44de8dpMJam2NhYhg4dyubNm1GpVLi6uja5+2FD5/ljjz1GVlYW33//PXv27GHmzJmkp6djZ2eHj4+P0Uk2jh07hqmpKZ06dVJ+GzlyJDNmzCAnJ4cBAwbQtWtXzp8/r1Tw8/LyDB47Q+40bxrS2EQ2KpUKLy8vtFotO3fuJC0tjTlz5nD8+HHOnj1LWFiYwe1cXFxISUm563TVuTU/Zs2aRdu2bTl+/DhmZmaMGjVKL5+belwa2ufblzX1HDSkZ8+eZGdns3v3bnbu3Mlbb71lsDJ74cIFXnnlFTIzM+nVqxcnT57E19fXaLjGynGo7aJprEv23LlzGTlypPJ948aNODg46HW1r/P9999TUVGh/L9qigkTJpCSkkJZWRlt27ZVuik2VDYATXpY0dh5Onr0aLy9vfnuu+9ITk5myZIlbN++vcG4m1KGTpkyhfT0dKC2K39dxbAhFRUVPPLII42uJ0nSgyPHnEkGvf3220ydOpXTp08rv12/ft3o+tXV1ezdu5e+ffvWW/bGG28QHx9PYGBgg3Gq1Wrmz5/PrFmzEEIwYsQI/va3vyk3FEVFRZw9exZra2ucnZ1JTU0Fap+wZ2RkGA03NDSU1NRULly4ANS2StWNScrJyaFHjx7ExMQwa9YsDh06hE6n49y5c7i5uTF9+nTGjBnDkSNH6Nu3LzU1NXz33XdAbavTlStXjFZY1Wq1XivjnSgqKuKJJ57AwsKCK1euKOPAoLZyOnbsWNauXUtsbCyRkZEIIYyGFRgYyI4dO5TJLG4d3O/t7U1ubq7egHGtVquMCdHpdKxduxaAI0eOcPnyZTQaDdbW1pSXlzd57Eh4eLjewP1bP5MnTwYgPz+fqqoqAG7evElaWhouLi5KGP369eOXX35pUnyNGTFiBElJSdy4cQOonY3whx9+MJr3UDsmsm58z+9RVFREt27dUKlUpKenK+MfDcUxePBg/vWvfykPJJYvX270pvHatWtcv36doKAg3nvvPbp3766McambuMfQp64V49KlS0pYhw4doqCgADs7O6C2taDuvMnNzWXv3r1KC3BycjIzZ8783cfldo1db8bOzdzcXKysrHj++edZtmwZP/30E2VlZUrLmaFPUytmkZGRTRprB7X5XNfCl5OTo+xHYwYPHkxqaipVVVVUVlbqpe1Ozoc7denSJVQqFaGhoXzwwQcIIbh48WK9c7K4uJgWLVpga2uLEILk5GS9cFq1aqW3vrFyHPQnoLn9c2vFDGDlypVMnDjRYNpXrlxJVFSUci7Xeeqpp5Tr93YRERFs3LiRTz75RK/F01jZ0JC6PMrLy2Pfvn34+PgwcOBATp06pYwj3rBhA506daJTp06cOXOGDh06EBkZSWJiotIa2FDcTSlDly5dqvzWlIrZ1atXUalUdOnSpdF1JUl6cGTL2UPWHN5HFhwcTIsWLZTvhw4d4uWXX+bRRx/lxRdfpLi4mHbt2mFhYcE//vEPvW19fHwwNTWlsrISZ2dn5s6dWy/83r17M3369CalZdKkSSQnJ5OWlkZSUhIzZsxAo9FgYmKCmZkZiYmJ2NnZsWbNGqKjo1m0aBF2dna4u7sbHfTs4+NDYmIiI0eORKfTUVlZybBhw3BzcyM5OZndu3fTsmVLTE1N+fDDD6muriY6OprCwkLMzMxo164dKSkptGzZkrS0NKZMmcK0adOwsLBg06ZNWFlZ8euvv9aLd9CgQVy6dInCwkJat27dpP2v89prrzFmzBgcHBzo2LGj0u0FYOLEiYSHhxMQEIC/vz/p6ekkJiYSHx9vMCxHR0cSEhLw8fHByspKmYYawMbGhq+//prp06czbdo0qqqq6Nq1qzIlfl1rjLOzMzqdjvXr1ytdeiIjI1Gr1VhZWTU6AUdTZGRk8PbbbytP+AMDA/nrX/8K1FbcCgoK7vg4GhMfH8/Nmzfx9PRUnnLHx8djZ2dnMO+hdor1mJgYLC0tlcln7sbChQuJi4tj/vz5aDQave62ERERREVFsXXrViZPnsxLL71EVlYWXl5emJiYoFar+eijjwyGe/HiRWJiYqiqqqK6uponn3yyXnfVhkRFRXH16lVMTU155JFH2LhxI4899hhQexMdHR1Nr169MDU1JTk5mbZt2wKQnZ1Nz5497/p4GKJSqRq93oydm5s2bWLx4sXKebRo0SJlP5riL3/5C19//TVXrlwhODiYVq1aKZWJo0ePMmXKlCaFM3v2bCIiIli9ejW9evVq9OFUnZiYGLKysrC3t8fGxgYfHx+OHTsGQEhISJPPhzt16tQpZs6ciRACnU5HREQEarUanU6Hg4MDjo6O9OzZk23btjF27FgcHBxo06aNUkmvM23aNJ5++mksLS3597//3WA53lQ5OTlotVq2b99eb1lxcTFpaWlKt9A61dXVnDhxwujkLh07dsTDw4Nt27bpTYphrGww1HPi1rhcXFy4fv06S5cuVboirlu3jsjISHQ6HTY2NmzcuBGVSsWmTZtITU2lZcuW1NTUKA8+7ibuxqjVaq5du0ZJSQmdO3cmICBAeaixY8cORo4cqdfjQ5Kkh08lGnrkLt1TFRUV5Obm0qNHjzvqhibVV1ZWxqOPPopKpSI3NxcvLy8yMzOb3RPAum4o93rK9Qehrhtrc3iHz8aNG8nJyVFmNZOaj0GDBvHNN9/ck+nv8/Pz6dKlC+Xl5c3uhvHatWu88MILTW4Bkx6uzMxMli9frsx6KtXn4+PDP//5T2Wcd0Pk/YskPTiy5Uz6Qzpw4IBS4amuriYpKanZVcygtgWsbjC/dPdunfRAal4a6lJ8JzIzMwkLCyMhIaHZVcwA2rVrJytmfyDu7u64u7s/7GQ0W1evXmXSpElNqphJkvRgyZazB0g+eZLup9DQUGVcXR0bG5t670n6s9BqtcpsfrcaP348U6dOffAJkhSxsbEGZ907ePCgnJzgPpPHXrob8v5Fkh4cWTl7gGThJkmSJEnSH428f5GkB6f59R2RJEmSJEmSJEn6E5KVM0mSJEmSJEmSpGZAVs4kSZIkSZIkSZKaAVk5kyRJkiRJkiRJagbkVPoP2fe+fvclXL/07+9LuJIkSZIkSZIk3R+y5exPrnv37vTt2xeNRkPfvn1ZuHChsuzo0aOEhYUZ3K6srAyVSnVP0vDcc89x8ODBRtfz9/dn69atja4XFRXFkiVLfn/CjPjqq6/o168fvXv3ZtSoUZSUlBhc7+uvv2bAgAGYm5vz+uuv37f03Im2bduSl5f30OJfsmQJV65cadK6W7duNTjl990qKChAo9Eonz59+mBmZkZhYSEAnp6eyjJHR0dUKhUnT54EYPr06axfv/6epUWSJEmSJMkQWTmT+Pzzz9FqtezevZv333+fI0eOAODm5sbnn39+X+M+cuQIhYWFeHl53dd47pWysjImTpzI1q1bOXPmDB07dmT+/PkG1+3duzerVq1SXpZ9N3Q63V1v2xw9zMpZmzZt0Gq1yufll18mJCSE1q1bA3D48GFlWUJCAo6OjqjVagDeeustEhISqK6uvmfpkSRJkiRJup2snEmKTp060a9fP86fPw/A3r170Wg0yvLly5fTu3dvXFxcSEpK0tv2iy++oH///jg7OxMfH6/XQnPmzBmGDRuGu7s7arWa5ORkvTBfeOEF5fv69evx9PTExcUFZ2dnvvzyS4NpjYqKIjo6Gm9vb/r06cP48eMpLy9Xlv/444889dRT9OnTh1GjRlFZWQnArl278PLywsXFBQcHB1auXHlHx+ibb77BxcWFfv36ARAXF8dnn31mcN0+ffrg7OyMmdmd9R6u2zdfX18cHR0BCA8Px83NDbVazbBhw5QKTl5eHo8//jhz585lwIAB2NnZsX37diWsbdu20b9/f9RqNW+99ZZePEePHsXb2xu1Wo2Hhwf79+/XC3POnDm4urrSu3dv9u/fz9SpU5VWpaysrAb3YcWKFdjb26PRaHBycuLw4cO88847XL58mbCwMDQaDVqt1mh+bN++nW3btrFo0SI0Gg0rVqwAYO3atXh6euLq6oqvry8nTpy4o2N7q5UrVzJx4sQmLWvfvj29evXi3//+913HJ0mSJEmS1Bg55kxSnD59moKCAvz9/esty8rKYu7cuRw/fhxbW1tmzZqlLMvPzyc6Opr9+/fTr18/UlJSKCgoAKC6uppx48aRmppKv379uHHjBgMHDsTT0xN3d3f27t3L1KlTlbCCg4MZN24cKpWKvLw8Bg4cyPnz5zE3N6+XpsOHD3Po0CEsLS0ZMWIESUlJSrq0Wi179uzB3NwcX19fNm/ezLhx43B1dSUjIwNTU1MKCwtxcXEhODiYzp07s27dOhYtWmTw2MTExDB58mQuXLhAt27dlN+7d+/Of//7X3Q63R1Xwhpy7NgxMjIyaNWqFVDb4tSuXTsAFi5cSEJCAp988gkAxcXFqNVq5s2bx44dO3jttdcYOnQo+fn5TJgwgX379mFvb88///lPJV8qKysZNWoU/+///T+Cg4PJyMhg9OjRnD17VglzwIABzJ8/n5UrVxIcHMyXX35JUlISixYtYt68eWzcuNFo+qdNm8bp06extbWlqqqKmzdv4unpyapVq/j888+VSn9RUZHB/Bg6dCihoaFoNBqlS+j+/fv57LPPSE9Px9zcnH379vHCCy/www8/kJOTY7QLrouLCykpKXq/HThwgKKiIp555pl661+8eJHvv/+etWvX6v3u5eXFrl27CAkJaSjrJEmSJEmS7pqsnEmEhYVhYmJCTk4OSUlJSiXgVrt37yYkJARbW1sAJk2axPvvvw/AoUOHUKvVSmvS+PHjiY2NBSAnJ4cffviBsWPHKmGVlpaSnZ2Nu7s7ly5dokOHDsqy3NxcwsPDuXTpkjIeKDc3Vwn7Vs8//7xSeZk4cSJLly5VKmcjR47E0tISAA8PD86dOwfUjjuaOHEiP/30E2ZmZhQUFJCVlUXnzp0JDw8nPDz89x3Me+S5555T9g1qWxTXrl1LRUUFFRUVtG3bVllmYWHBqFGjgNoKRN2+1uWLvb09UHuMXn31VaA2X0xMTAgODgZg0KBBdOjQAa1WS+fOnbGwsGDEiBFAbfdWKysrAgICgNrjuW7dugbT/9RTTxEREcHw4cMJCQmhT58+BtdrKD9u98UXX3DixAk8PT2V3woLCykvL6dv375otdoG03SrlStXEhkZabBC/emnn/LMM8/oHWOAJ554guzs7CbHIUmSJEmSdKdk5UxSWjJ27tzJ8OHDCQwMxMnJqcFtmjoZiBCC1q1bG71xtrS0pKKiQvk+duxYFi5cyJgxYwBo3bq13vKmpsnCwkL529TUVBm7FRsby9ChQ9m8eTMqlQpXV1cl/Ka0nHXt2pXvvvtO+T0vLw9bW9t72moGYGVlpfydkZHB0qVLOXjwIO3bt2fbtm28/fbbynJzc3Nl301NTY2Oi2osz25dfmtLpampqdHjaczmzZs5duwYe/fuZejQobz77rt6FfQ6DeXH7YQQjB8/nvfee6/esjtpOSsrK+Nf//oXmZmZBuNISUnh448/rresoqKCRx55xOg+S5IkSZIk/V5yzJmkGDx4MJMmTWL27Nn1lgUGBrJjxw5lrFNdlzqAgQMHcvLkSXJycgBITU1Vxnj17dsXa2trvZvjs2fPKjPkqdVqZTuo7ebWo0cPJZyioiKj6d20aRNlZWVUV1eTkpLC4MGDG93HoqIiunXrhkqlIj09XW/MUnh4uN6EEbd+Jk+eDMCQIUP4z3/+w+nTpwH46KOPDFY6GrNlyxYiIyObtG5RURGtWrWiTZs2VFZWsnz58iZt5+XlxcmTJ5W0rlq1Si9fampqlIrmgQMHuHLlit4Yw7ul0+k4d+4cbm5uTJ8+nTFjxiiTzFhbW1NcXKy3b8by4/Z1Q0NDSU1N5cKFCwDU1NRw9OhRZX+M5d3tXRo///xznJ2dDbbG7t69G51Ox9NPP11v2Y8//oizs/PvODKSJEmSJEkNky1nD1lzex/ZnDlzsLOz49ixY3q/Ozo6kpCQgI+PD1ZWVko3OqidLGHFihWMGDECc3Nznn76aaysrHj88ccxMzPjq6++4vXXXycpKYnq6mratm2rTEs+ZswYvv32W6Vi9fe//50xY8bw+OOPExgYSNeuXY2m1d3dneDgYK5du4aXl1eTpqtfuHAhcXFxzJ8/H41Go9dFrilatWql7KtOp8PR0ZHVq1cryzUaDdu3b6djx47s2rWL8ePHU1JSghCCTZs28dFHHxEaGsqZM2ewtrZuUpxDhgwhNTWVvn370qZNGwYPHswvv/zS6Hbt2rVj1apVjBw5kpYtWzJkyBDatGkDQMuWLUlLS2PKlClMmzYNCwsLNm3ahJWVFb/++usdHZPbVVdXEx0dTWFhIWZmZrRr106pIE2ZMoWYmBgsLS359NNPG8yPiIgIoqKi2Lp1K5MnT+all14iMTGRkSNHotPpqKysZNiwYbi5ud1R+lauXElMTIzRZRMmTMDERP+5lRCCXbt2MWPGjDs8GpIkSZIkSU2nEkKIh52IP4uKigpyc3Pp0aOHXjex/wWlpaXKGKmtW7cyc+ZMfvzxx0a3Kysrw9vbm4MHD/Loo482Ob6oqCi9ySL+aEaMGMGSJUvo3r37w06K1AQ7duwgNTWV1NTUh50USZKkB+5/+f5Fkpob2XIm3RPLli3j888/p7q6Gmtr60YnjKhjZWVFUlISubm5yrTxfwZNeZm21HwUFxeTmJj4sJMhSZIkSdL/ONly9gDJJ0/S/5Lt27frvVKhzsyZM41OziFJkiT98cj7F0l6cGTLmSRJd2Xo0KEMHTr0YSdDkiRJkiTpf4acrfEhkI2VkiRJkiT9UdTU1DzsJEjSn4ZsOXuAWrRogUql4tq1a7Rr167J7wqTJEmSJEl60IQQVFZWcu3aNUxMTGjZsuXDTpIk/c+TY84esLKyMi5duiRbzyRJkiRJ+kOwtLTE1tZWVs4k6QGQlbOHoLq6mqqqqoedDEmSJEmSpAaZmppiZmYme/tI0gMiK2eSJEmSJEmSJEnNgJwQRJIkSZIkSZIkqRmQlTNJkiRJkiRJkqRmQFbOJEmSJEmSJEmSmgFZOZMkSZIkSZIkSWoGZOVMkiRJkiRJkiSpGZCVM0mSJEmSJEmSpGZAVs4kSZIkSZIkSZKagf8PMnU8p1Inr10AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "print(\"-------------------\")\n",
    "print(\"ForecasterRecursive\")\n",
    "print(\"-------------------\")\n",
    "steps = 100\n",
    "lags = 50\n",
    "estimators = [\n",
    "    Ridge(random_state=77, alpha=0.1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=-1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    HistGradientBoostingRegressor(random_state=77, max_iter=50, max_depth=5,),\n",
    "]\n",
    "param_grids = [\n",
    "    {'alpha': [0.1, 0.1, 0.1]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
    "]\n",
    "lags_grid = [50, 50, 50]\n",
    "elapsed_times = []\n",
    "\n",
    "for estimator, param_grid in zip(estimators, param_grids):\n",
    "    print(\"\")\n",
    "    print(estimator, param_grid)\n",
    "    print(\"\")\n",
    "    forecaster = ForecasterRecursive(\n",
    "                     estimator        = estimator,\n",
    "                     lags             = lags,\n",
    "                     transformer_exog = StandardScaler()\n",
    "                 )\n",
    "    \n",
    "    print(\"Profiling fit\")\n",
    "    start = time.time()\n",
    "    forecaster.fit(y=y, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling create_train_X_y\")\n",
    "    start = time.time()\n",
    "    _ = forecaster.create_train_X_y(y=y, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "    print(\"Profiling backtesting refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             steps              = steps,\n",
    "             initial_train_size = len(y_train),\n",
    "             refit              = True,\n",
    "             fixed_train_size   = False,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting refit no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             steps              = steps,\n",
    "             initial_train_size = len(y_train),\n",
    "             refit              = False,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)    \n",
    "    \n",
    "    print(\"Profiling GridSearch no refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             steps              = steps,\n",
    "             initial_train_size = len(y_train),\n",
    "             refit              = False,\n",
    "         )\n",
    "    results_grid = grid_search_forecaster(\n",
    "                       forecaster    = forecaster,\n",
    "                       y             = y,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = -1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling GridSearch no refit no parallel\")\n",
    "    start = time.time()\n",
    "    results_grid = grid_search_forecaster(\n",
    "                       forecaster    = forecaster,\n",
    "                       y             = y,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = 1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "\n",
    "methods = [\n",
    "    \"fit\",\n",
    "    \"create_train_X_y\",\n",
    "    \"backtest_refit_parallel\",\n",
    "    \"backtest_refit_noparallel\",\n",
    "    \"backtest_no_refit_parallel\",\n",
    "    \"backtest_no_refit_noparallel\",\n",
    "    \"gridSearch_no_refit_parallel\",\n",
    "    \"gridSearch_no_refit_noparallel\"\n",
    "]\n",
    "\n",
    "results = pd.DataFrame({\n",
    "    \"estimator\": np.repeat(np.array([str(estimator) for estimator in estimators]), len(methods)),\n",
    "    \"method\": np.tile(methods, len(estimators)),\n",
    "    \"elapsed_time\": elapsed_times\n",
    "})\n",
    "results[\"estimator\"] = results[\"estimator\"].str.replace(\"\\n              \", \" \")\n",
    "results['parallel'] = results.method.str.contains(\"_parallel\")\n",
    "results['method'] = results.method.str.replace(\"_parallel\", \"\")\n",
    "results['method'] = results.method.str.replace(\"_noparallel\", \"\")\n",
    "results = results.sort_values(by=[\"estimator\", \"method\", \"parallel\"])\n",
    "\n",
    "results_pivot = results.pivot_table(\n",
    "    index=[\"estimator\", \"method\"],\n",
    "    columns=\"parallel\",\n",
    "    values=\"elapsed_time\"\n",
    ").reset_index()\n",
    "results_pivot.columns.name = None\n",
    "results_pivot[\"pct_improvement\"] = (results_pivot[False] - results_pivot[True]) / results_pivot[False] * 100\n",
    "display(results_pivot)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "bars = sns.barplot(data=results_pivot.dropna(), x=\"method\", y=\"pct_improvement\", hue=\"estimator\", ax=ax)\n",
    "for container in bars.containers:\n",
    "    ax.bar_label(container, fmt='%.1f', padding=3, fontsize=8)\n",
    "ax.set_title(\"Parallel vs Sequential (ForecasterRecursive)\")\n",
    "ax.set_ylabel(\"Percent improvement\")\n",
    "ax.set_xlabel(\"Method\")\n",
    "ax.legend(fontsize=8, loc='lower left', bbox_to_anchor=(0, -0.31), ncols=1);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Benchmark ForecasterDirect"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------\n",
      "ForecasterDirect\n",
      "----------------\n",
      "\n",
      "Ridge(alpha=0.1, random_state=77) {'alpha': [0.1, 0.1, 0.1]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=-1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "HistGradientBoostingRegressor(max_depth=5, max_iter=50, random_state=77) {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>estimator</th>\n",
       "      <th>method</th>\n",
       "      <th>False</th>\n",
       "      <th>True</th>\n",
       "      <th>pct_improvement</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>2.728197</td>\n",
       "      <td>5.023978</td>\n",
       "      <td>-84.150110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>71.989915</td>\n",
       "      <td>28.746552</td>\n",
       "      <td>60.068641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.009108</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>fit</td>\n",
       "      <td>1.012895</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>8.722155</td>\n",
       "      <td>27.459687</td>\n",
       "      <td>-214.826857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>1.175862</td>\n",
       "      <td>1.919050</td>\n",
       "      <td>-63.203676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>25.116236</td>\n",
       "      <td>28.374661</td>\n",
       "      <td>-12.973379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.010000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.386074</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>6.524236</td>\n",
       "      <td>11.774790</td>\n",
       "      <td>-80.477689</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>1.028363</td>\n",
       "      <td>1.998308</td>\n",
       "      <td>-94.319227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>31.491574</td>\n",
       "      <td>12.525722</td>\n",
       "      <td>60.225165</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.006005</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.723918</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>6.923338</td>\n",
       "      <td>11.685491</td>\n",
       "      <td>-68.784073</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>0.158813</td>\n",
       "      <td>0.132391</td>\n",
       "      <td>16.637442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>1.816731</td>\n",
       "      <td>0.620145</td>\n",
       "      <td>65.864817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.006006</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.062544</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>0.548561</td>\n",
       "      <td>0.618236</td>\n",
       "      <td>-12.701411</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            estimator               method  \\\n",
       "0   HistGradientBoostingRegressor(max_depth=5, max...    backtest_no_refit   \n",
       "1   HistGradientBoostingRegressor(max_depth=5, max...       backtest_refit   \n",
       "2   HistGradientBoostingRegressor(max_depth=5, max...     create_train_X_y   \n",
       "3   HistGradientBoostingRegressor(max_depth=5, max...                  fit   \n",
       "4   HistGradientBoostingRegressor(max_depth=5, max...  gridSearch_no_refit   \n",
       "5   LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "6   LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "7   LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "8   LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "9   LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "10  LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "11  LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "12  LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "13  LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "14  LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "15                  Ridge(alpha=0.1, random_state=77)    backtest_no_refit   \n",
       "16                  Ridge(alpha=0.1, random_state=77)       backtest_refit   \n",
       "17                  Ridge(alpha=0.1, random_state=77)     create_train_X_y   \n",
       "18                  Ridge(alpha=0.1, random_state=77)                  fit   \n",
       "19                  Ridge(alpha=0.1, random_state=77)  gridSearch_no_refit   \n",
       "\n",
       "        False       True  pct_improvement  \n",
       "0    2.728197   5.023978       -84.150110  \n",
       "1   71.989915  28.746552        60.068641  \n",
       "2    0.009108        NaN              NaN  \n",
       "3    1.012895        NaN              NaN  \n",
       "4    8.722155  27.459687      -214.826857  \n",
       "5    1.175862   1.919050       -63.203676  \n",
       "6   25.116236  28.374661       -12.973379  \n",
       "7    0.010000        NaN              NaN  \n",
       "8    0.386074        NaN              NaN  \n",
       "9    6.524236  11.774790       -80.477689  \n",
       "10   1.028363   1.998308       -94.319227  \n",
       "11  31.491574  12.525722        60.225165  \n",
       "12   0.006005        NaN              NaN  \n",
       "13   0.723918        NaN              NaN  \n",
       "14   6.923338  11.685491       -68.784073  \n",
       "15   0.158813   0.132391        16.637442  \n",
       "16   1.816731   0.620145        65.864817  \n",
       "17   0.006006        NaN              NaN  \n",
       "18   0.062544        NaN              NaN  \n",
       "19   0.548561   0.618236       -12.701411  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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sV+pHNf7wu/ggbIOgYg+ApzVUEZMvIiIqDxi4kVEpDrOakhERERERPQeYeJFREREREQkMyZeREREREREMmPiRUREREREJDMmXkRERERERDKrUNYBEBFR0bxHri7rEErV6dlBZR1CqWq4qGFZh1BqZvAjARGRrNjjRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyY+JFREREREQkMyZeREREREREMmPiRUREREREJLNylXhNmjQJCoVC6VGrVi1pfWZmJgYNGgRjY2Po6emhY8eOuHv3bhlGTEREREREH4NylXgBgIuLC5KSkqTH4cOHpXXDhg3DX3/9hY0bN+LAgQO4c+cOOnToUIbREhERERHRx6Dc/Ux9hQoVYG5uXmB5SkoKli9fjrVr16JZs2YAgIiICDg5OeH48eNo0KDBuw6ViIiIiIg+EuWux+vatWuwsLCAnZ0devTogcTERADA6dOn8fz5c/j7+0tla9WqherVq+PYsWNF1peVlYXU1FSlBxERERERkSrKVeJVv359rFy5Ev/88w+WLl2K+Ph4NGrUCE+fPkVycjI0NTVRqVIlpW3MzMyQnJxcZJ0zZ86EoaGh9LCyspL5KIiIiIiIqLwpV7catmzZUvrbzc0N9evXh7W1NTZs2AAdHZ03qnPs2LEYPny49Dw1NZXJFxERERERqaRc9Xi9qlKlSnB0dERcXBzMzc2RnZ2NJ0+eKJW5e/duoWPC8mlpacHAwEDpQUREREREpIpynXilpaXh+vXrqFq1Kry9vaGhoYHIyEhpfWxsLBITE+Hj41OGURIRERERUXlXrm41/Oabb9CmTRtYW1vjzp07mDhxItTV1dGtWzcYGhoiNDQUw4cPh5GREQwMDPD111/Dx8eHMxoSEREREZGsylXidevWLXTr1g0PHz6EqakpPvnkExw/fhympqYAgHnz5kFNTQ0dO3ZEVlYWAgIC8NNPP5Vx1EREREREVN6Vq8Rr3bp1xa7X1tbGkiVLsGTJkncUERERERERUTkf40VERERERPQ+YOJFREREREQkMyZeREREREREMmPiRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyY+JFREREREQkMyZeREREREREMmPiRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyY+JFREREREQkMyZeREREREREMmPiRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyY+JFREREREQkMyZeREREREREMmPiRURvZfDgwbCxsYFCoUBMTIy0PCsrC2FhYXBwcICrqyt69uxZZB3nz59HkyZN4OTkBCcnJ2zZsuUdRE5ERET07lQo6wCI6MP2xRdfYNSoUfjkk0+Ulo8ZMwYKhQJXr16FQqFAcnJyodtnZGSgXbt2WL16NT755BPk5ubi0aNH7yJ0IiIioneGiRcRvZXGjRsXWJaeno7ly5fj1q1bUCgUAABzc/NCt1+7di0aNGggJW7q6uowNTWVL2AiIiKiMsBbDYmo1F2/fh1GRkaYMWMG6tSpg0aNGiEyMrLQspcuXYKWlhY+++wzeHh4ICgoCPfv33/HERMRERHJi4kXEZW6nJwc3LhxA87Ozjh16hQWLlyILl264O7du4WW3bt3L37++WecOXMG1apVw1dffVUGURMRERHJh4kXEZW66tWrQ01NDT169AAAeHp6wtbWFufPny+0bNOmTVGtWjUoFAr07NkTx48ff9chExEREcmKiRcRlToTExM0b94cu3btAgDEx8cjPj4eTk5OBcp27twZ0dHRSE1NBQDs3LkT7u7u7zReIiIiIrkx8SKit9K/f39YWlri1q1bCAgIgL29PQAgPDwcs2fPhqurK9q3b4+ff/4Z1apVAwD06dMH27ZtA/Cix+vbb7+Fr68v3NzcsG/fPoSHh5fZ8RARERHJgbMaEtFb+fnnnwtdbmdnh6ioqELX/e9//1N63qtXL/Tq1avUYyMiIiJ6X7DHi4iIiIiISGZMvIiIiIiIiGTGxIuIiIiIiEhmTLyIiIiIiIhkxsSLiIiIiIhIZpzVkIhwoLFfWYdQqvwOHijrEIiIiIiUsMeLiIiIiIhIZky8iIiIiIiIZMbEi4iIiIiISGZMvIiIiIiIiGTGxIuIiIiIiEhmTLyIiIiIiIhkxsSLiIiIiIhIZky8iIiIiIiIZMbEi4iIiIiISGZMvIiIiIiIiGTGxIuIiIiIiEhmTLyIiIiIiIhkxsSLiIiIiIhIZky8iIiIiIiIZMbEi4iIiIiISGYfbeK1ZMkS2NjYQFtbG/Xr18fJkyfLOiQiIiIiIiqnPsrEa/369Rg+fDgmTpyIf//9F+7u7ggICMC9e/fKOjQiIiIiIiqHPsrEa+7cuejbty++/PJLODs7Izw8HLq6ulixYkVZh0ZEREREROXQR5d4ZWdn4/Tp0/D395eWqampwd/fH8eOHSvDyIiIiIiIqLyqUNYBvGsPHjxAbm4uzMzMlJabmZnhypUrBcpnZWUhKytLep6amip7jEREREREVL58dImXqmbOnInJkyeXyb69R64uk/3K5Q/92WUdQqnpVtmgrEMoVUcOHinrEKgIp2cHlXUIpSpximtZh1Cqjkw4X9YhlJ6vyzoAKk55+kxQnj4PAOXvM8GMjeUnPfA7eKCsQ1Dy0d1qaGJiAnV1ddy9e1dp+d27d2Fubl6g/NixY5GSkiI9bt68+a5CJSIiIiKicuKjS7w0NTXh7e2NyMhIaVleXh4iIyPh4+NToLyWlhYMDAyUHkRERERERKooP32JKhg+fDiCg4NRp04d1KtXD/Pnz0d6ejq+/PLLsg6NiIiIiIjKoY8y8erSpQvu37+PCRMmIDk5GR4eHvjnn38KTLhBRERERERUGj7KxAsAwsLCEBYWVtZhEBERERHRR+CjG+NFRERERET0rjHxIiIiIiIikhkTLyIiIiIiIpkx8SIiIiIiIpIZEy8iIiIiIiKZMfEiIiIiIiKSGRMvIiIiIiIimTHxIiIiIiIikhkTLyIiIiIiIpkx8SIiIiIiIpJZhbIOgIiIPh7VJ5wv6xCIiKgYfgcPlHUI5RZ7vIiIiIiIiGTGxIuIiIiIiEhmKideU6ZMQUZGRoHlz549w5QpU0olKCIiIiIiovJE5cRr8uTJSEtLK7A8IyMDkydPLpWgiIiICjN48GDY2NhAoVAgJiZGaV2LFi3g5uYGDw8PNGrUCGfOnCmynuXLl8PBwQE1atRA37598fz5c5kjJyL6OBR1nc7MzET79u3h6OgId3d3fPrpp4iLiyu0jl27dsHDw0N6WFhYwMvL6x0dgXxUTryEEFAoFAWWnz17FkZGRqUSFBERUWG++OILHD58GNbW1gXWbdiwAefOnUNMTAyGDx+OkJCQQuuIj4/Hd999h0OHDiEuLg53797FL7/8InPkREQfh+Ku0/369UNsbCzOnj2Ldu3aoU+fPoXWERAQgJiYGOnh5eWFHj16yB267EqceFWuXBlGRkZQKBRwdHSEkZGR9DA0NMSnn36Kzp07yxkrERF95Bo3bgxLS8tC11WqVEn6OyUlpdAvCQFg06ZNaNu2LczNzaFQKDBgwAD8/vvvcoRLRPTRKeo6ra2tjVatWknX5gYNGiAhIeG19d25cweRkZHo1atXaYf6zpV4Ovn58+dDCIHevXtj8uTJMDQ0lNZpamrCxsYGPj4+sgRJRERUEkFBQYiKigIA7Ny5s9AyiYmJSt/E2tjYIDEx8Z3ER0RELyxYsADt2rV7bbmVK1eiVatWqFKlyjuISl4lTryCg4MBALa2tvD19YWGhoZsQREREb2J1atXAwBWrVqF0aNHF5l8ERFR2ZkxYwbi4uIQGRlZbDkhBFasWIGFCxe+o8jkpfIYLz8/P6irq+Pq1as4fPgwDh48qPQgIiIqLatXr5YGV0dERJR4u+DgYERFReHhw4cF1lWvXh03btyQnickJKB69eqlEi8R0cdG1ev0nDlzsGXLFvz999/Q1dUttuyBAweQmZmJgICA0gq3TJW4xyvf8ePH0b17d9y4cQNCCKV1CoUCubm5pRYcERF93IKCghAUFPTack+ePEFGRgYsLCwAAFu3boWxsXGhkz517NgRn3zyCSZNmgQzMzOEh4eja9eupR47EdHHoKTXaQCYO3cufv/9d+zdu1dpXG5Rli9fjpCQEKirq79llO8HlROvAQMGoE6dOtixYweqVq1a5OBlIiKi0ta/f3/s2LEDycnJCAgIgL6+PuLi4pCSkoJOnTrh2bNnUFNTg6mpKbZv3y79H9WnTx+0bdsWbdu2hZ2dHSZPnoyGDRsCAJo0aYL+/fuX5WEREZUbRV2nb926hREjRsDOzg5NmzYFAGhpaeHEiRMAgAkTJsDCwgIDBgwA8GKSpC1btuD8+fNldiylTSFe7bZ6jYoVK+Ls2bOwt7eXK6b3WmpqKgwNDZGSkgIDAwNZ9+U9crWs9b9rf+jPLusQSk23yvK+9u/aka+PlHUIRERUjPL0maA8fR4A+JngY6dKbqDyGK/69esX+WNnREREREREVJDKtxp+/fXXGDFiBJKTk+Hq6lpgdkM3N7dSC46IiIiIiKg8UDnx6tixIwCgd+/e0jKFQgEhBCfXICIiIiIiKoTKiVd8fLwccRAREREREZVbKide1tbWcsRBRERERERUbqk8uQYA/Prrr2jYsCEsLCykH6GcP38+/vzzz1INjoiIiIiIqDxQOfFaunQphg8fjlatWuHJkyfSmK5KlSph/vz5pR0fERERERHRB0/lxGvRokVYtmwZxo0bp/Qr0nXq1ClXP3BGRERERERUWlROvOLj4+Hp6VlguZaWFtLT00slKCIiIiIiovJE5cTL1tYWMTExBZb/888/cHJyKo2YiIiIiIiIyhWVZzUcPnw4Bg0ahMzMTAghcPLkSfz++++YOXMm/ve//8kRIxERERER0QdN5cSrT58+0NHRwfjx45GRkYHu3bvDwsICCxYsQNeuXeWIkYiIiIiI6IOmcuIFAD169ECPHj2QkZGBtLQ0VKlSpbTjIiIiIiIiKjfeKPHKp6urC11d3dKKhYiIiIiIqFxSOfF6+PAhJkyYgKioKNy7dw95eXlK6x89elRqwREREREREZUHKidevXr1QlxcHEJDQ2FmZgaFQiFHXEREREREROWGyonXoUOHcPjwYbi7u8sRDxERERERUbmj8u941apVC8+ePZMjFiIiIiIionJJ5cTrp59+wrhx43DgwAE8fPgQqampSg8iIiIiIiJSpvKthpUqVUJqaiqaNWumtFwIAYVCgdzc3FILjoiIiIiIqDxQOfHq0aMHNDQ0sHbtWk6uQUREREREVAIqJ14XLlzAmTNnULNmTTniISIiIiIiKndUHuNVp04d3Lx5U45YiIiIiIiIyiWVe7y+/vprDBkyBCNHjoSrqys0NDSU1ru5uZVacEREREREROWByolXly5dAAC9e/eWlikUCk6uQUREREREVASVE6/4+Hg54iAiIiIiIiq3VE68rK2t5YiDiIiIiIio3FJ5cg0A+PXXX9GwYUNYWFjgxo0bAID58+fjzz//LNXgiIiIiIiIygOVE6+lS5di+PDhaNWqFZ48eSKN6apUqRLmz59f2vERERERERF98FROvBYtWoRly5Zh3LhxUFdXl5bXqVMH58+fL9XgVGVjYwOFQqH0mDVrllKZc+fOoVGjRtDW1oaVlRV++OGHMoqWiIiIiIg+Fm80uYanp2eB5VpaWkhPTy+VoN7GlClT0LdvX+m5vr6+9HdqaipatGgBf39/hIeH4/z58+jduzcqVaqEfv36lUW4RERERET0EVA58bK1tUVMTEyBSTb++ecfODk5lVpgb0pfXx/m5uaFrvvtt9+QnZ2NFStWQFNTEy4uLoiJicHcuXOZeBERERERkWxUvtVw+PDhGDRoENavXw8hBE6ePInp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THpev359LF68WLaYiYiIiIpiZmaGX375BZ07d4aamhry8vKwePFiqVfr+++/R69eveDg4ABNTU2sWbNGmtFwwoQJsLCwwIABA3D48GFMmDAB6urqyMnJQbNmzTBu3LiyPDT6CJQo8bK2ti70b3p/FTf4FAA2bdoENTU1tG3bttjE62W5ublYvHgx2rVrJ2foREREREXq1q0bunXrVug6MzMz7N69u9B1U6ZMkf7u0KEDOnToIEt8REVReXIN+jAUN/g0f93+/ftLXJ8QAgMHDkTlypUxZMgQ+QInIiIiIiqHmHiVI6tXr8bcuXMBAD169Chy8Gl2djaSkpLg4eEBAHjw4AG2bduG+/fvY/r06YXWPXjwYNy8eRNbt26FmlqJhgYSEREREdH/x8SrHAkKCkJQUBAA4O7du5gyZQouX74MJycnpcGn1atXx927d6XtQkJC4OHhgaFDhxZa7+DBgxEXF4etW7dKtyoSEREREVHJMfEqp143+LQ44eHhuHPnDqZMmYIjR45g0aJFqFWrFurXrw8AsLW1xR9//CH3IRARERERlRsKIYRQZQM7OztER0fD2NhYafmTJ0/g5eWF//77r1QDfN+kpqbC0NAQKSkpMDAwKOtwiIiI6CPgPXJ1WYdQak7PDirrEIhKjSq5gcqDdRISEpCbm1tgeVZWFm7fvq1qdUREREREROVeiW813LZtm/T3rl27YGhoKD3Pzc1FZGQkbGxsSjU4IiIiIiKi8qDEPV7t27dH+/btoVAoEBwcLD1v3749unbtij179uDHH3+ULdDp06fD19cXurq6qFSpUqFlEhMT0bp1a+jq6qJKlSoYOXIkcnJylMrs378fXl5e0NLSgr29PVauXClbzERERERERIAKPV55eXkAXkysEB0dDRMTE9mCKkx2djY6deoEHx8fLF++vMD63NxctG7dGubm5jh69CiSkpIQFBQEDQ0NzJgxAwAQHx+P1q1bY8CAAfjtt98QGRmJPn36oGrVqggICHinx0NERERERB8Plcd4xcfHv/OkCwAmT56MYcOGwdXVtdD1u3fvxqVLl7BmzRp4eHigZcuWmDp1KpYsWYLs7GwAL2brs7W1xY8//ggnJyeEhYXhiy++wLx5897loRDhn3/+QZ06deDm5oYGDRrg7NmzBcrs27cP6urqmD9/fqF1pKeno379+nB3d4e7uzsCAwORkJAgb+BERERE9EbeaDr5yMhIREZG4t69e1JPWL4VK1aUSmCqOnbsGFxdXWFmZiYtCwgIwFdffYWLFy/C09MTx44dg7+/v9J2AQEBRf5+FZEcHj9+jB49euDgwYNwcXHBoUOH0KNHD1y4cEEqk5KSgjFjxqBVq1ZF1qOjo4O9e/dCX18fADBv3jwMGTIEf/75p+zHQERERESqUbnHa/LkyWjRogUiIyPx4MEDPH78WOlRVpKTk5WSLgDS8+Tk5GLLpKam4tmzZ4XWm5WVhdTUVKUH0du4fv06jI2N4eLiAgBo1KgREhMT8e+//0plwsLCMH78+AI/2/AyNTU1KekSQiA1NRUKhULe4ImIiIjojajc4xUeHo6VK1eiV69eb73zMWPG4Pvvvy+2zOXLl1GrVq233tebmjlzJiZPnlxm+6fyx8HBAQ8fPsTRo0fh6+uLbdu24enTp0hISICXlxc2bdoENTU1tG3bFlu2bHltff7+/jh//jxMTU2xa9eud3AERERERKQqlROv7Oxs+Pr6lsrOR4wYgZCQkGLL2NnZlaguc3NznDx5UmnZ3bt3pXX5/+Yve7mMgYEBdHR0Cq137NixGD58uPQ8NTUVVlZWJYqJqDCGhobYtGkTxo4di7S0NPj4+MDZ2RkVKlRAcnIypk2bhv3795e4vr179yIvLw/Tp0/H9OnT8dNPP8kXPBERERG9EZUTrz59+mDt2rX47rvv3nrnpqamMDU1fet6AMDHxwfTp0/HvXv3UKVKFQDAnj17YGBgAGdnZ6nMzp07lbbbs2cPfHx8iqxXS0sLWlpapRIjfbxWr16NuXPnAgCGDBmCL7/8Ek2bNgXw4nZWc3NzODs74/Tp00hKSoKHhwcA4MGDB9i2bRvu37+P6dOnF1m/mpoa+vbtCwcHByZeRERERO8hlROvzMxM/PLLL9i7dy/c3NygoaGhtD7/w2VpS0xMxKNHj5CYmIjc3FzExMQAAOzt7aGnp4cWLVrA2dkZvXr1wg8//IDk5GSMHz8egwYNkhKnAQMGYPHixRg1ahR69+6Nffv2YcOGDdixY4csMRPlCwoKQlBQkPQ8KSkJVatWBQBMnToVzZo1g729Pezt7ZV6ZUNCQuDh4VHoBDDJycnQ0tJC5cqVAQDr16+Hm5ubvAdCRERERG9E5cTr3Llz0rfxL8/CBkDWgf0TJkzAqlWrpOeenp4AgKioKDRp0gTq6urYvn07vvrqK/j4+KBixYoIDg7GlClTpG1sbW2xY8cODBs2DAsWLIClpSX+97//8Te86J2bMGECDh06hJycnCJ/m64w4eHhuHPnDqZMmYLExET0798fubm5EEKgRo0aWLNmjcyRExEREdGbUAghRFkH8SFJTU2FoaEhUlJSYGBgUNbhEBER0UfAe+Tqsg6h1JyeHfT6QkQfCFVyA5Wnk88XFxeHXbt2SdOwM38jIiIiIiIqnMqJ18OHD9G8eXM4OjqiVatWSEpKAgCEhoZixIgRpR4gERERERHRh07lxGvYsGHQ0NBAYmIidHV1peVdunTBP//8U6rBERERERERlQcqT66xe/du7Nq1C5aWlkrLHRwccOPGjVILjIiIiIiIqLxQuccrPT1dqacr36NHj/h7V0RERERERIVQOfFq1KgRVq/+v5l1FAoF8vLy8MMPP0g/CEtERERERET/R+VbDX/44Qc0b94cp06dQnZ2NkaNGoWLFy/i0aNHOHLkiBwxEhERERERfdBU7vGqXbs2rl69ik8++QTt2rVDeno6OnTogDNnzqBGjRpyxEhERERERPRBU7nHCwAMDQ0xbty40o6FiIiIiIioXFK5xysiIgIbN24ssHzjxo1YtWpVqQRFRERERERUnqiceM2cORMmJiYFllepUgUzZswolaCIiIiIiIjKE5UTr8TERNja2hZYbm1tjcTExFIJioiIiIiIqDxROfGqUqUKzp07V2D52bNnYWxsXCpBERERERERlScqJ17dunXD4MGDERUVhdzcXOTm5mLfvn0YMmQIunbtKkeMREREREREHzSVZzWcOnUqEhIS0Lx5c1So8GLzvLw8BAUFcYwXERERERFRIVRKvIQQSE5OxsqVKzFt2jTExMRAR0cHrq6usLa2litGIiIiIiKiD5rKiZe9vT0uXrwIBwcHODg4yBUXERERERFRuaHSGC81NTU4ODjg4cOHcsVDRERERERU7qg8ucasWbMwcuRIXLhwQY54iIiIiIiIyh2VJ9cICgpCRkYG3N3doampCR0dHaX1jx49KrXgiIiIiIiIygOVE6/58+fLEAYREREREVH5pXLiFRwcLEccRERERERE5ZbKY7wA4Pr16xg/fjy6deuGe/fuAQD+/vtvXLx4sVSDIyIiIiIiKg9UTrwOHDgAV1dXnDhxAlu2bEFaWhoA4OzZs5g4cWKpB0hERERERPShUznxGjNmDKZNm4Y9e/ZAU1NTWt6sWTMcP368VIMjIiIiIiIqD1ROvM6fP4/PP/+8wPIqVargwYMHpRIUERERERFReaJy4lWpUiUkJSUVWH7mzBlUq1atVIIiIiIiIiIqT1ROvLp27YrRo0cjOTkZCoUCeXl5OHLkCL755hsEBQXJESMREREREdEHTeXEa8aMGahVqxasrKyQlpYGZ2dnNG7cGL6+vhg/frwcMRIREREREX3QVP4dL01NTSxbtgwTJkzA+fPnkZaWBk9PTzg4OMgRHxERERER0QevxIlXXl4eZs+ejW3btiE7OxvNmzfHxIkToaOjI2d8REREREREH7wS32o4ffp0fPvtt9DT00O1atWwYMECDBo0SM7YiIiIiIiIyoUSJ16rV6/GTz/9hF27dmHr1q3466+/8NtvvyEvL0/O+IiIiIiIiD54JU68EhMT0apVK+m5v78/FAoF7ty5I0tgRERERERE5UWJE6+cnBxoa2srLdPQ0MDz589LPSgiIiIiIqLypMSTawghEBISAi0tLWlZZmYmBgwYgIoVK0rLtmzZUroREhERERERfeBKnHgFBwcXWNazZ89SDYaIiIiIiKg8KnHiFRERIWccRERERERE5VaJx3gRERERERHRm2HiRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyY+JFREREREQkMyZeREREREREMmPiRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyY+JFREREREQkMyZeREREREREMvtgEq/p06fD19cXurq6qFSpUqFlFApFgce6deuUyuzfvx9eXl7Q0tKCvb09Vq5cKX/wRERERET0UftgEq/s7Gx06tQJX331VbHlIiIikJSUJD3at28vrYuPj0fr1q3RtGlTxMTEYOjQoejTpw927dolc/RERERERPQxq1DWAZTU5MmTAeC1PVSVKlWCubl5oevCw8Nha2uLH3/8EQDg5OSEw4cPY968eQgICCjVeImIiIiIiPJ9MD1eJTVo0CCYmJigXr16WLFiBYQQ0rpjx47B399fqXxAQACOHTv2rsMkIiIiIqKPyAfT41USU6ZMQbNmzaCrq4vdu3dj4MCBSEtLw+DBgwEAycnJMDMzU9rGzMwMqampePbsGXR0dArUmZWVhaysLOl5amqqvAdBRERERETlTpn2eI0ZM6bQCTFefly5cqXE9X333Xdo2LAhPD09MXr0aIwaNQqzZ89+qxhnzpwJQ0ND6WFlZfVW9RERERER0cenTHu8RowYgZCQkGLL2NnZvXH99evXx9SpU5GVlQUtLS2Ym5vj7t27SmXu3r0LAwODQnu7AGDs2LEYPny49Dw1NZXJFxERERERqaRMEy9TU1OYmprKVn9MTAwqV64MLS0tAICPjw927typVGbPnj3w8fEpsg4tLS1peyIiIiIiojfxwYzxSkxMxKNHj5CYmIjc3FzExMQAAOzt7aGnp4e//voLd+/eRYMGDaCtrY09e/ZgxowZ+Oabb6Q6BgwYgMWLF2PUqFHo3bs39u3bhw0bNmDHjh1ldFRERERERPQx+GASrwkTJmDVqlXSc09PTwBAVFQUmjRpAg0NDSxZsgTDhg2DEAL29vaYO3cu+vbtK21ja2uLHTt2YNiwYViwYAEsLS3xv//9j1PJExERERGRrBTi5fnW6bVSU1NhaGiIlJQUGBgYlHU4RERE9BHwHrm6rEMoNadnB5V1CESlRpXcoNz9jhcREREREdH7hokXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcyYeBEREREREcmMiRcREREREZHMmHgRERERERHJjIkXERERERGRzJh4ERERERERyYyJFxERERERkcw+iMQrISEBoaGhsLW1hY6ODmrUqIGJEyciOztbqdy5c+fQqFEjaGtrw8rKCj/88EOBujZu3IhatWpBW1sbrq6u2Llz57s6DCIiIiIi+kh9EInXlStXkJeXh59//hkXL17EvHnzEB4ejm+//VYqk5qaihYtWsDa2hqnT5/G7NmzMWnSJPzyyy9SmaNHj6Jbt24IDQ3FmTNn0L59e7Rv3x4XLlwoi8MiIiIiIqKPhEIIIco6iDcxe/ZsLF26FP/99x8AYOnSpRg3bhySk5OhqakJABgzZgy2bt2KK1euAAC6dOmC9PR0bN++XaqnQYMG8PDwQHh4eIn2m5qaCkNDQ6SkpMDAwKCUj4qIiIioIO+Rq8s6hFJzenZQWYdAVGpUyQ0+iB6vwqSkpMDIyEh6fuzYMTRu3FhKugAgICAAsbGxePz4sVTG399fqZ6AgAAcO3asyP1kZWUhNTVV6UFERERERKSKDzLxiouLw6JFi9C/f39pWXJyMszMzJTK5T9PTk4utkz++sLMnDkThoaG0sPKyqq0DoOIiIiIiD4SZZp4jRkzBgqFothH/m2C+W7fvo3AwEB06tQJffv2lT3GsWPHIiUlRXrcvHlT9n0SEREREVH5UqEsdz5ixAiEhIQUW8bOzk76+86dO2jatCl8fX2VJs0AAHNzc9y9e1dpWf5zc3PzYsvkry+MlpYWtLS0XnssRERERERERSnTxMvU1BSmpqYlKnv79m00bdoU3t7eiIiIgJqacmedj48Pxo0bh+fPn0NDQwMAsGfPHtSsWROVK1eWykRGRmLo0KHSdnv27IGPj0/pHBAREREREVEhPogxXrdv30aTJk1QvXp1zJkzB/fv30dycrLS2Kzu3btDU1MToaGhuHjxItavX48FCxZg+PDhUpkhQ4bgn3/+wY8//ogrV65g0qRJOHXqFMLCwsrisIiIiIiI6CNRpj1eJbVnzx7ExcUhLi4OlpaWSuvyZ8M3NDTE7t27MWjQIHh7e8PExAQTJkxAv379pLK+vr5Yu3Ytxo8fj2+//RYODg7YunUrateu/U6Ph4iIiIiIPi4f7O94lRX+jhcRERG9a/wdL6L300fxO15EREREREQfCiZeREREREREMmPiRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyY+JFREREREQkMyZeREREREREMmPiRUREREREJDMmXkRERERERDJj4kVERERERCQzJl5EREREREQyq1DWARARERFR8U7PDirrEIjoLbHHi4iIiIiISGZMvIiIiIiIiGTGxIuIiIiIiEhmTLyIiIiIypHMzEy0b98ejo6OcHd3x6effoq4uDhp/YwZM1CzZk2oqalh69athdaxb98+qKurY/78+UXuZ9WqVXB1dYWHhwc8PT2xc+fOUj4SovKFiRcRERFROdOvXz/Exsbi7NmzaNeuHfr06SOt8/f3x99//43GjRsXum1KSgrGjBmDVq1aFVn/o0eP8PXXX2PPnj2IiYnBokWLEBISUtqHQVSuMPEiIiIiKke0tbXRqlUrKBQKAECDBg2QkJAgra9Xrx7s7OyK3D4sLAzjx4+HsbFxkWXy8vIghMDTp08BAE+ePIGlpWXpHABROcXp5ImIiIjKsQULFqBdu3YlKrtp0yaoqamhbdu22LJlS5HlTExMEB4eDi8vLxgZGeHZs2fYu3dvaYVMVC4x8SIiIiIqp2bMmIG4uDhERka+tmxycjKmTZuG/fv3v7ZsSkoKFixYgJMnT8LJyQl//fUXPv/8c1y+fBmampqlEDlR+cNbDYmIiIg+cKtXr4aHhwc8PDwQEREBAJgzZw62bNmCv//+G7q6uq+t4/Tp00hKSoKHhwdsbGywadMmTJkyBePGjStQds+ePahUqRKcnJwAAG3atEFqaipu3LhRugdGVI6wx4uIiIjoAxcUFISgoCDp+dy5c/H7779j7969qFSpUonqaN26Ne7evSs9DwkJgYeHB4YOHVqgrJ2dHWJiYpCcnAxzc3McO3YMOTk5sLKyettDISq3mHgRERERlSO3bt3CiBEjYGdnh6ZNmwIAtLS0cOLECQDAtGnTEB4ejvv37+PChQsICwvDmTNnYGpqWmy94eHhuHPnDqZMmQIvLy+MGzcOzZo1g4aGBipUqIANGzZAW1tb9uMj+lAphBCirIP4kKSmpsLQ0BApKSkwMDAo63CIiIiIiKiMqJIbcIwXERERERGRzJh4ERERERERyYyJFxERERERkcw4uYaK8ofEpaamlnEkRERERERUlvJzgpJMm8HES0VPnz4FAE6XSkREREREAF7k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",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"----------------\")\n",
    "print(\"ForecasterDirect\")\n",
    "print(\"----------------\")\n",
    "steps = 10\n",
    "lags = 10\n",
    "estimators = [\n",
    "    Ridge(random_state=77, alpha=0.1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=-1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    HistGradientBoostingRegressor(random_state=77, max_iter=50, max_depth=5,),\n",
    "]\n",
    "param_grids = [\n",
    "    {'alpha': [0.1, 0.1, 0.1]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
    "]\n",
    "lags_grid = [50, 50, 50]\n",
    "elapsed_times = []\n",
    "\n",
    "for estimator, param_grid in zip(estimators, param_grids):\n",
    "    print(\"\")\n",
    "    print(estimator, param_grid)\n",
    "    print(\"\")\n",
    "    forecaster = ForecasterDirect(\n",
    "                     estimator        = estimator,\n",
    "                     steps            = steps,\n",
    "                     lags             = lags,\n",
    "                     transformer_exog = StandardScaler()\n",
    "                 )\n",
    "    \n",
    "    print(\"Profiling fit\")\n",
    "    start = time.time()\n",
    "    forecaster.fit(y=y, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling create_train_X_y\")\n",
    "    start = time.time()\n",
    "    _ = forecaster.create_train_X_y(y=y, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "    print(\"Profiling backtesting refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             steps              = steps,\n",
    "             initial_train_size = int(len(y) * 0.9),\n",
    "             refit              = True,\n",
    "             fixed_train_size   = False,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting refit no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             steps              = steps,\n",
    "             initial_train_size = int(len(y) * 0.9),\n",
    "             refit              = False,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       y             = y,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)    \n",
    "    \n",
    "    print(\"Profiling GridSearch no refit parallel\")\n",
    "    start = time.time()\n",
    "    results_grid = grid_search_forecaster(\n",
    "                       forecaster    = forecaster,\n",
    "                       y             = y,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = -1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling GridSearch no refit no parallel\")\n",
    "    start = time.time()\n",
    "    results_grid = grid_search_forecaster(\n",
    "                       forecaster    = forecaster,\n",
    "                       y             = y,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = 1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "\n",
    "methods = [\n",
    "    \"fit\",\n",
    "    \"create_train_X_y\",\n",
    "    \"backtest_refit_parallel\",\n",
    "    \"backtest_refit_noparallel\",\n",
    "    \"backtest_no_refit_parallel\",\n",
    "    \"backtest_no_refit_noparallel\",\n",
    "    \"gridSearch_no_refit_parallel\",\n",
    "    \"gridSearch_no_refit_noparallel\"\n",
    "]\n",
    "\n",
    "results = pd.DataFrame({\n",
    "    \"estimator\": np.repeat(np.array([str(estimator) for estimator in estimators]), len(methods)),\n",
    "    \"method\": np.tile(methods, len(estimators)),\n",
    "    \"elapsed_time\": elapsed_times\n",
    "})\n",
    "results[\"estimator\"] = results[\"estimator\"].str.replace(\"\\n              \", \" \")\n",
    "results['parallel'] = results.method.str.contains(\"_parallel\")\n",
    "results['method'] = results.method.str.replace(\"_parallel\", \"\")\n",
    "results['method'] = results.method.str.replace(\"_noparallel\", \"\")\n",
    "results = results.sort_values(by=[\"estimator\", \"method\", \"parallel\"])\n",
    "\n",
    "results_pivot = results.pivot_table(\n",
    "    index=[\"estimator\", \"method\"],\n",
    "    columns=\"parallel\",\n",
    "    values=\"elapsed_time\"\n",
    ").reset_index()\n",
    "results_pivot.columns.name = None\n",
    "results_pivot[\"pct_improvement\"] = (results_pivot[False] - results_pivot[True]) / results_pivot[False] * 100\n",
    "display(results_pivot)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "bars = sns.barplot(data=results_pivot.dropna(), x=\"method\", y=\"pct_improvement\", hue=\"estimator\", ax=ax)\n",
    "for container in bars.containers:\n",
    "    ax.bar_label(container, fmt='%.1f', padding=3, fontsize=8)\n",
    "ax.set_title(\"Parallel vs Sequential (ForecasterDirect)\")\n",
    "ax.set_ylabel(\"Percent improvement\")\n",
    "ax.set_xlabel(\"Method\")\n",
    "ax.legend(fontsize=8, loc='lower left', bbox_to_anchor=(0, -0.31), ncols=1);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Benchmark ForecasterRecursiveMultiSeries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "------------------------------\n",
      "ForecasterRecursiveMultiSeries\n",
      "------------------------------\n",
      "\n",
      "Ridge(alpha=0.1, random_state=77) {'alpha': [0.1, 0.1, 0.1]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit and no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit and no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=-1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit and no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "HistGradientBoostingRegressor(max_depth=5, max_iter=50, random_state=77) {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit and no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>estimator</th>\n",
       "      <th>method</th>\n",
       "      <th>False</th>\n",
       "      <th>True</th>\n",
       "      <th>pct_improvement</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>1.106152</td>\n",
       "      <td>0.664156</td>\n",
       "      <td>39.957987</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>8.177982</td>\n",
       "      <td>4.231594</td>\n",
       "      <td>48.256264</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.073507</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.396801</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>4.788807</td>\n",
       "      <td>2.866729</td>\n",
       "      <td>40.136880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>2.918234</td>\n",
       "      <td>1.537057</td>\n",
       "      <td>47.329215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>15.102185</td>\n",
       "      <td>11.231904</td>\n",
       "      <td>25.627290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.093560</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.421425</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>12.388050</td>\n",
       "      <td>6.388853</td>\n",
       "      <td>48.427290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>1.801216</td>\n",
       "      <td>1.084726</td>\n",
       "      <td>39.778153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>19.794949</td>\n",
       "      <td>9.823516</td>\n",
       "      <td>50.373624</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.053997</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>1.159806</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>5.983032</td>\n",
       "      <td>4.391494</td>\n",
       "      <td>26.600865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>0.476766</td>\n",
       "      <td>3.180120</td>\n",
       "      <td>-567.018602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>2.896543</td>\n",
       "      <td>1.427100</td>\n",
       "      <td>50.730913</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.085904</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.187410</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>1.479561</td>\n",
       "      <td>1.118693</td>\n",
       "      <td>24.390221</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            estimator               method  \\\n",
       "0   HistGradientBoostingRegressor(max_depth=5, max...    backtest_no_refit   \n",
       "1   HistGradientBoostingRegressor(max_depth=5, max...       backtest_refit   \n",
       "2   HistGradientBoostingRegressor(max_depth=5, max...     create_train_X_y   \n",
       "3   HistGradientBoostingRegressor(max_depth=5, max...                  fit   \n",
       "4   HistGradientBoostingRegressor(max_depth=5, max...  gridSearch_no_refit   \n",
       "5   LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "6   LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "7   LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "8   LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "9   LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "10  LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "11  LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "12  LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "13  LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "14  LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "15                  Ridge(alpha=0.1, random_state=77)    backtest_no_refit   \n",
       "16                  Ridge(alpha=0.1, random_state=77)       backtest_refit   \n",
       "17                  Ridge(alpha=0.1, random_state=77)     create_train_X_y   \n",
       "18                  Ridge(alpha=0.1, random_state=77)                  fit   \n",
       "19                  Ridge(alpha=0.1, random_state=77)  gridSearch_no_refit   \n",
       "\n",
       "        False       True  pct_improvement  \n",
       "0    1.106152   0.664156        39.957987  \n",
       "1    8.177982   4.231594        48.256264  \n",
       "2    0.073507        NaN              NaN  \n",
       "3    0.396801        NaN              NaN  \n",
       "4    4.788807   2.866729        40.136880  \n",
       "5    2.918234   1.537057        47.329215  \n",
       "6   15.102185  11.231904        25.627290  \n",
       "7    0.093560        NaN              NaN  \n",
       "8    0.421425        NaN              NaN  \n",
       "9   12.388050   6.388853        48.427290  \n",
       "10   1.801216   1.084726        39.778153  \n",
       "11  19.794949   9.823516        50.373624  \n",
       "12   0.053997        NaN              NaN  \n",
       "13   1.159806        NaN              NaN  \n",
       "14   5.983032   4.391494        26.600865  \n",
       "15   0.476766   3.180120      -567.018602  \n",
       "16   2.896543   1.427100        50.730913  \n",
       "17   0.085904        NaN              NaN  \n",
       "18   0.187410        NaN              NaN  \n",
       "19   1.479561   1.118693        24.390221  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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mHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKfbWJ1++//w5LS0toa2ujbt26OHPmTFGHREREREREJdRXmXht2rQJI0eORGBgIC5cuABnZ2f4+PjgyZMnRR0aERERERGVQF9l4jV37lz06dMHPXv2hL29PZYuXQpdXV2sXLmyqEMjIiIiIqIS6KtLvNLT03H+/Hl4e3tL09TU1ODt7Y2TJ0/mKp+WlobExES5FxERERERkSJkQghR1EF8To8ePULlypVx4sQJeHh4SNPHjBmDI0eO4PTp03Llg4KCEBwcnKuehIQEGBgYqDxeos/hSEOvog5BqbyOHinqEIiIiOgrkJiYCENDw0LlBl9di5eixo8fj4SEBOl1//79og6JiIiIiIiKmVJFHcDnZmRkBHV1dTx+/Fhu+uPHj2FqapqrvJaWFrS0tD5XeEREREREVAJ9dS1empqacHNzQ1hYmDQtKysLYWFhco8eEhERERERKctX1+IFACNHjoS/vz/c3d1Rp04dzJ8/H8nJyejZs2dRh0ZERERERCXQV5l4+fn54enTp5g8eTLi4+Ph4uKCffv2wcTEpKhDIyIiIiKiEuirTLwAYPDgwRg8eHBRh0FERERERF+Br66PFxERERER0efGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKMfEiIiIiIiJSMSZeREREREREKsbEi4iIiIiISMWYeBEREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiIiIhUjIkXERERERGRijHxIiIiIiIiUjEmXkRERERERCrGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKMfEiIiIiIiJSMSZeREREREREKsbEi4iIiIiISMWYeBEREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiIiIhUrNgkXtOmTYOnpyd0dXVRpkyZPMvExsaiRYsW0NXVRYUKFTB69GhkZGTIlTl8+DBq1aoFLS0tVKtWDatWrVJ98ERERERE9FUrNolXeno62rdvjwEDBuQ5PzMzEy1atEB6ejpOnDiB1atXY9WqVZg8ebJUJjo6Gi1atEDjxo0RERGB4cOHo3fv3ti/f//n2gwiIiIiIvoKyYQQoqiDUMSqVaswfPhwvHr1Sm763r178f333+PRo0cwMTEBACxduhRjx47F06dPoampibFjx+Lff/9FZGSktFzHjh3x6tUr7Nu3r1DrT0xMhKGhIRISEmBgYKC07SIqSkcaehV1CErldfRIUYdAREREXwFFcoNi0+L1ISdPnoSjo6OUdAGAj48PEhMTcfXqVamMt7e33HI+Pj44efJkvvWmpaUhMTFR7kVERERERKSIEpN4xcfHyyVdAKT38fHxBZZJTEzEmzdv8qx3xowZMDQ0lF5mZmYqiJ6IiIiIiEqyIk28xo0bB5lMVuDrxo0bRRkixo8fj4SEBOl1//79Io2HiIiIiIiKn1JFufJRo0ahR48eBZapWrVqoeoyNTXFmTNn5KY9fvxYmpf9b/a0nGUMDAygo6OTZ71aWlrQ0tIqVAxERERERER5KdLEy9jYGMbGxkqpy8PDA9OmTcOTJ09QoUIFAEBoaCgMDAxgb28vldmzZ4/ccqGhofDw8FBKDERERERERHkpNn28YmNjERERgdjYWGRmZiIiIgIRERFISkoCADRt2hT29vbo1q0bLl26hP3792PixIkYNGiQ1GLVv39/3L17F2PGjMGNGzewePFibN68GSNGjCjKTSMiIiIiohKuSFu8FDF58mSsXr1aeu/q6goACA8PR6NGjaCuro7du3djwIAB8PDwQOnSpeHv748pU6ZIy1hZWeHff//FiBEjsGDBAlSpUgV//vknfHx8Pvv2EBERERHR16PY/Y5XUePveFFJxN/xIiIiIlLcV/k7XkRERERERF8qJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiIiIhUjIkXERERERGRijHxIiIiIiIiUjGFE68pU6YgJSUl1/Q3b95gypQpSgmKiIiIiIioJFE48QoODkZSUlKu6SkpKQgODlZKUERERERERCWJwomXEAIymSzX9EuXLqFcuXJKCYqIiIiIiKgkKVXYgmXLloVMJoNMJoOtra1c8pWZmYmkpCT0799fJUESEREREREVZ4VOvObPnw8hBHr16oXg4GAYGhpK8zQ1NWFpaQkPDw+VBElERERERFScFTrx8vf3BwBYWVnB09MTGhoaKguKiIiIiIioJCl04pXNy8sLWVlZuHnzJp48eYKsrCy5+Q0bNlRacERERERERCWBwonXqVOn0LlzZ9y7dw9CCLl5MpkMmZmZSguOiIiIiIioJFA48erfvz/c3d3x77//omLFinmOcEhERERERET/R+HE69atW9i6dSuqVauminiIiIiIiIhKHIV/x6tu3bq4ffu2KmIhIiIiIiIqkRRu8RoyZAhGjRqF+Ph4ODo65hrd0MnJSWnBERERERERlQQKJ17t2rUDAPTq1UuaJpPJIITg4BpERERERER5UDjxio6OVkUcREREREREJZbCiZeFhYUq4iAiIiIiIiqxFB5cAwDWrFmD+vXro1KlSrh37x4AYP78+di1a5dSgyMiIiIiIioJFE68lixZgpEjR6J58+Z49eqV1KerTJkymD9/vrLjIyIiIiIiKvYUTrwWLlyI5cuXY8KECVBXV5emu7u748qVK0oNjoiIiIiIqCRQOPGKjo6Gq6trrulaWlpITk5WSlBEREREREQlicKJl5WVFSIiInJN37dvH+zs7JQRExERERERUYmi8KiGI0eOxKBBg5CamgohBM6cOYMNGzZgxowZ+PPPP1URIxERERERUbGmcOLVu3dv6OjoYOLEiUhJSUHnzp1RqVIlLFiwAB07dlRFjERERERERMWawokXAHTp0gVdunRBSkoKkpKSUKFCBWXHRUREREREVGJ8VOKVTVdXF7q6usqKhYiIiIiIqERSOPF6/vw5Jk+ejPDwcDx58gRZWVly81+8eKG04IiIiIiIiEoChROvbt264fbt2wgICICJiQlkMpkq4iIiIiIiIioxFE68jh07hv/++w/Ozs6qiIeIiIiIiKjEUfh3vGrUqIE3b96oIhYiIiIiIqISSeHEa/HixZgwYQKOHDmC58+fIzExUe5FRERERERE8hR+1LBMmTJITEzEt99+KzddCAGZTIbMzEylBUdERERERFQSKJx4denSBRoaGli/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mQx379795KC+ZImJiTA0NERCQgIMDAyKOhwipTjS0KuoQ1Aqr6NHijoEIiIi+gookhso3OIVHR390YERERERERF9jRTu45WTEAIKNpgRERERERF9dT4q8VqxYgVq1qwJbW1taGtro2bNmvjzzz+VHRsREREREVGJoPCjhpMnT8bcuXMxZMgQeHh4AABOnjyJESNGIDY2FlOmTFF6kERERERERMWZwonXkiVLsHz5cnTq1Ema1qpVKzg5OWHIkCFMvIiIiIiIiN6j8KOGb9++hbu7e67pbm5uyMjIUEpQREREREREJYnCiVe3bt2wZMmSXNOXLVuGLl26KCUoIiIiIiKikkThRw2Bd4NrHDhwAPXq1QMAnD59GrGxsejevTtGjhwplZs7d65yoiQiIiIiIirGFE68IiMjUatWLQDAnTt3AABGRkYwMjJCZGSkVE4mkykpRCIiIiIiouJN4cQrPDxcFXEQERERERGVWJ/0A8pERERERET0YQq3eKWmpmLhwoUIDw/HkydPkJWVJTf/woULSguOiIiIiIioJFA48QoICMCBAwfw448/ok6dOuzLRURERERE9AEKJ167d+/Gnj17UL9+fVXEQ0REREREVOIo3MercuXK0NfXV0UsREREREREJZLCidecOXMwduxY3Lt3TxXxEBERERERlTgKP2ro7u6O1NRUVK1aFbq6utDQ0JCb/+LFC6UFR0REREREVBIonHh16tQJDx8+xPTp02FiYsLBNYiIiIiIiD5A4cTrxIkTOHnyJJydnVURDxERERERUYmjcB+vGjVq4M2bN6qIhYiIiIiIqERSOPGaOXMmRo0ahcOHD+P58+dITEyUexEREREREZE8hR819PX1BQA0adJEbroQAjKZDJmZmcqJjIiIiIiIqIRQOPEKDw9XRRxEREREREQllsKJl5eXlyriICIiIiIiKrEKlXhdvnwZNWvWhJqaGi5fvlxgWScnJ6UERkREREREVFIUKvFycXFBfHw8KlSoABcXF8hkMgghcpVjHy8iIiIiIqLcCpV4RUdHw9jYWPqbiIiIiIiICq9Qw8lbWFhAJpNJfxf0UpVWrVrB3Nwc2traqFixIrp164ZHjx7Jlbl8+TIaNGgAbW1tmJmZ4ddff81Vz5YtW1CjRg1oa2vD0dERe/bsUVnMREREREREwEf8jldRady4MTZv3oyo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aWzfvh1JSUkAgEuXLiEwMFDpARIRERERERV3Cide48aNwy+//ILQ0FBoampK07/99lucOnVKqcERERERERGVBAonXleuXMEPP/yQa3qFChXw7NkzpQRFRERERERUkiiceJUpUwZxcXG5pl+8eBGVK1dWSlBEREREREQlicKJV8eOHTF27FjEx8dDJpMhKysLx48fx08//YTu3burIkYiIiIiIqJiTeHEa/r06ahRowbMzMyQlJQEe3t7NGzYEJ6enpg4caIqYiQiIiIiIirWFP4dL01NTSxfvhyTJ0/GlStXkJSUBFdXV9jY2KgiPiIiIiIiomKv0IlXVlYWZs2ahb///hvp6elo0qQJAgMDoaOjo8r4iIiIiIiIir1CP2o4bdo0/Pzzz9DT00PlypWxYMECDBo0SJWxERERERERlQiFTrz++usvLF68GPv378fOnTvxzz//YN26dcjKylJlfERERERERMVeoROv2NhYNG/eXHrv7e0NmUyGR48eqSQwIiIiIiKikqLQiVdGRga0tbXlpmloaODt27dKD4qIiIiIiKgkKfTgGkII9OjRA1paWtK01NRU9O/fH6VLl5ambd++XbkREhERERERFXOFTrz8/f1zTevatatSgyEiIiIiIiqJCp14hYSEqDIOIiIiIiKiEqvQfby+FGlpaXBxcYFMJkNERITcvMuXL6NBgwbQ1taGmZkZfv3111zLb9myBTVq1IC2tjYcHR2xZ8+ezxQ5ERERERF9rYpd4jVmzBhUqlQp1/TExEQ0bdoUFhYWOH/+PGbNmoWgoCAsW7ZMKnPixAl06tQJAQEBuHjxItq0aYM2bdogMjLyc24CERERERF9ZYpV4rV3714cOHAAs2fPzjVv3bp1SE9Px8qVK+Hg4ICOHTti6NChmDt3rlRmwYIF8PX1xejRo2FnZ4epU6eiVq1aWLRo0efcDCIiIiIi+soUm8Tr8ePH6NOnD9asWQNdXd1c80+ePImGDRtCU1NTmubj44OoqCi8fPlSKuPt7S23nI+PD06ePJnvetPS0pCYmCj3IiIiIiIiUkSxSLyyh7Lv378/3N3d8ywTHx8PExMTuWnZ7+Pj4wsskz0/LzNmzIChoaH0MjMz+5RNISIiIiKir1CRJl7jxo2DTCYr8HXjxg0sXLgQr1+/xvjx4z97jOPHj0dCQoL0un///mePgYiIiIiIirdCDyevCqNGjUKPHj0KLFO1alUcOnQIJ0+elPvxZgBwd3dHly5dsHr1apiamuLx48dy87Pfm5qaSv/mVSZ7fl60tLRyrZeIiIiIiEgRRZp4GRsbw9jY+IPlfvvtN/zyyy/S+0ePHsHHxwebNm1C3bp1AQAeHh6YMGEC3r59Cw0NDQBAaGgoqlevjrJly0plwsLCMHz4cKmu0NBQeHh4KHGriIiIiIiI5BVp4lVY5ubmcu/19PQAANbW1qhSpQoAoHPnzggODkZAQADGjh2LyMhILFiwAPPmzZOWGzZsGLy8vDBnzhy0aNECGzduxLlz5+SGnCciIiIiIlK2YjG4RmEYGhriwIEDiI6OhpubG0aNGoXJkyejb9++UhlPT0+sX78ey5Ytg7OzM7Zu3YqdO3eiZs2aRRg5ERERERGVdDIhhCjqIIqTxMREGBoaIiEhAQYGBkUdDpFSHGnoVdQhKJXX0SNFHQIRERF9BRTJDUpMixcREREREdGXiokXERERERGRijHxIiIiIiIiUjEmXkRERERERCrGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKMfEiIiIiIiJSMSZeREREREREKsbEi4iIiIiISMWYeBEREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiIiIhUjIkXERERERGRijHxIiIiIiIiUjEmXkRERERERCrGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKMfEiIiIiIiJSMSZeREREREREKsbEi4iIiIiISMWYeBEREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxYpN4mVpaQmZTCb3mjlzplyZy5cvo0GDBtDW1oaZmRl+/fXXXPVs2bIFNWrUgLa2NhwdHbFnz57PtQlERERERPSVKjaJFwBMmTIFcXFx0mvIkCHSvMTERDRt2hQWFhY4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",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"------------------------------\")\n",
    "print(\"ForecasterRecursiveMultiSeries\")\n",
    "print(\"------------------------------\")\n",
    "steps = 100\n",
    "lags = 50\n",
    "estimators = [\n",
    "    Ridge(random_state=77, alpha=0.1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=-1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    HistGradientBoostingRegressor(random_state=77, max_iter=50, max_depth=5,),\n",
    "]\n",
    "param_grids = [\n",
    "    {'alpha': [0.1, 0.1, 0.1]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
    "]\n",
    "lags_grid = [50, 50, 50]\n",
    "elapsed_times = []\n",
    "\n",
    "for estimator, param_grid in zip(estimators, param_grids):\n",
    "    print(\"\")\n",
    "    print(estimator, param_grid)\n",
    "    print(\"\")\n",
    "    forecaster = ForecasterRecursiveMultiSeries(\n",
    "                     estimator        = estimator,\n",
    "                     lags             = lags,\n",
    "                     transformer_exog = StandardScaler()\n",
    "                 )\n",
    "    \n",
    "    print(\"Profiling fit\")\n",
    "    start = time.time()\n",
    "    forecaster.fit(series=multi_series, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling create_train_X_y\")\n",
    "    start = time.time()\n",
    "    _ = forecaster.create_train_X_y(series=multi_series, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "    print(\"Profiling backtesting refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             initial_train_size = len(y_train),\n",
    "             refit              = True,\n",
    "             fixed_train_size   = False,\n",
    "             steps              = steps,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting refit and no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "            initial_train_size = len(y_train),\n",
    "            refit              = False,\n",
    "            steps              = steps,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)    \n",
    "    \n",
    "    print(\"Profiling GridSearch no refit parallel\")\n",
    "    start = time.time()\n",
    "    results_grid = grid_search_forecaster_multiseries(\n",
    "                       forecaster    = forecaster,\n",
    "                       series        = multi_series,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = -1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling GridSearch no refit no parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             initial_train_size = len(y_train),\n",
    "             refit              = False,\n",
    "             steps              = steps,\n",
    "         )\n",
    "    results_grid = grid_search_forecaster_multiseries(\n",
    "                       forecaster    = forecaster,\n",
    "                       series        = multi_series,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = 1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "\n",
    "methods = [\n",
    "    \"fit\",\n",
    "    \"create_train_X_y\",\n",
    "    \"backtest_refit_parallel\",\n",
    "    \"backtest_refit_noparallel\",\n",
    "    \"backtest_no_refit_parallel\",\n",
    "    \"backtest_no_refit_noparallel\",\n",
    "    \"gridSearch_no_refit_parallel\",\n",
    "    \"gridSearch_no_refit_noparallel\"\n",
    "]\n",
    "\n",
    "results = pd.DataFrame({\n",
    "    \"estimator\": np.repeat(np.array([str(estimator) for estimator in estimators]), len(methods)),\n",
    "    \"method\": np.tile(methods, len(estimators)),\n",
    "    \"elapsed_time\": elapsed_times\n",
    "})\n",
    "results[\"estimator\"] = results[\"estimator\"].str.replace(\"\\n              \", \" \")\n",
    "results['parallel'] = results.method.str.contains(\"_parallel\")\n",
    "results['method'] = results.method.str.replace(\"_parallel\", \"\")\n",
    "results['method'] = results.method.str.replace(\"_noparallel\", \"\")\n",
    "results = results.sort_values(by=[\"estimator\", \"method\", \"parallel\"])\n",
    "\n",
    "results_pivot = results.pivot_table(\n",
    "    index=[\"estimator\", \"method\"],\n",
    "    columns=\"parallel\",\n",
    "    values=\"elapsed_time\"\n",
    ").reset_index()\n",
    "results_pivot.columns.name = None\n",
    "results_pivot[\"pct_improvement\"] = (results_pivot[False] - results_pivot[True]) / results_pivot[False] * 100\n",
    "display(results_pivot)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "bars = sns.barplot(data=results_pivot.dropna(), x=\"method\", y=\"pct_improvement\", hue=\"estimator\", ax=ax)\n",
    "for container in bars.containers:\n",
    "    ax.bar_label(container, fmt='%.1f', padding=3, fontsize=8)\n",
    "ax.set_title(\"Parallel vs Sequential (ForecasterRecursiveMultiSeries)\")\n",
    "ax.set_ylabel(\"Percent improvement\")\n",
    "ax.set_xlabel(\"Method\")\n",
    "ax.legend(fontsize=8, loc='lower left', bbox_to_anchor=(0, -0.31), ncols=1);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Benchmark ForecasterDirectMultiVariate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------\n",
      "ForecasterDirectMultiVariate\n",
      "----------------------------\n",
      "\n",
      "Ridge(alpha=0.1, random_state=77) {'alpha': [0.1, 0.1, 0.1]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "LGBMRegressor(max_depth=5, n_estimators=50, n_jobs=-1, random_state=77,\n",
      "              verbose=-1) {'n_estimators': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n",
      "\n",
      "HistGradientBoostingRegressor(max_depth=5, max_iter=50, random_state=77) {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
      "\n",
      "Profiling fit\n",
      "Profiling create_train_X_y\n",
      "Profiling backtesting refit parallel\n",
      "Profiling backtesting refit no parallel\n",
      "Profiling backtesting no refit parallel\n",
      "Profiling backtesting no refit no parallel\n",
      "Profiling GridSearch no refit parallel\n",
      "Profiling GridSearch no refit no parallel\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>estimator</th>\n",
       "      <th>method</th>\n",
       "      <th>False</th>\n",
       "      <th>True</th>\n",
       "      <th>pct_improvement</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>2.853674</td>\n",
       "      <td>9.233681</td>\n",
       "      <td>-223.571717</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>129.822874</td>\n",
       "      <td>92.496529</td>\n",
       "      <td>28.751748</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.018000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>fit</td>\n",
       "      <td>1.330104</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>HistGradientBoostingRegressor(max_depth=5, max...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>24.548890</td>\n",
       "      <td>77.863022</td>\n",
       "      <td>-217.175326</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>2.891752</td>\n",
       "      <td>3.798469</td>\n",
       "      <td>-31.355314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>111.030921</td>\n",
       "      <td>86.056100</td>\n",
       "      <td>22.493573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.029996</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.717866</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>23.100491</td>\n",
       "      <td>25.343611</td>\n",
       "      <td>-9.710274</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>2.516266</td>\n",
       "      <td>3.437793</td>\n",
       "      <td>-36.622786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>186.235264</td>\n",
       "      <td>65.961237</td>\n",
       "      <td>64.581768</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.013000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>fit</td>\n",
       "      <td>1.724441</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>LGBMRegressor(max_depth=5, n_estimators=50, n_...</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>34.885274</td>\n",
       "      <td>39.199495</td>\n",
       "      <td>-12.366885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_no_refit</td>\n",
       "      <td>0.715881</td>\n",
       "      <td>0.862378</td>\n",
       "      <td>-20.463955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>backtest_refit</td>\n",
       "      <td>7.449928</td>\n",
       "      <td>3.115467</td>\n",
       "      <td>58.181243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>create_train_X_y</td>\n",
       "      <td>0.015999</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>fit</td>\n",
       "      <td>0.114108</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Ridge(alpha=0.1, random_state=77)</td>\n",
       "      <td>gridSearch_no_refit</td>\n",
       "      <td>2.783162</td>\n",
       "      <td>3.158578</td>\n",
       "      <td>-13.488834</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            estimator               method  \\\n",
       "0   HistGradientBoostingRegressor(max_depth=5, max...    backtest_no_refit   \n",
       "1   HistGradientBoostingRegressor(max_depth=5, max...       backtest_refit   \n",
       "2   HistGradientBoostingRegressor(max_depth=5, max...     create_train_X_y   \n",
       "3   HistGradientBoostingRegressor(max_depth=5, max...                  fit   \n",
       "4   HistGradientBoostingRegressor(max_depth=5, max...  gridSearch_no_refit   \n",
       "5   LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "6   LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "7   LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "8   LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "9   LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "10  LGBMRegressor(max_depth=5, n_estimators=50, n_...    backtest_no_refit   \n",
       "11  LGBMRegressor(max_depth=5, n_estimators=50, n_...       backtest_refit   \n",
       "12  LGBMRegressor(max_depth=5, n_estimators=50, n_...     create_train_X_y   \n",
       "13  LGBMRegressor(max_depth=5, n_estimators=50, n_...                  fit   \n",
       "14  LGBMRegressor(max_depth=5, n_estimators=50, n_...  gridSearch_no_refit   \n",
       "15                  Ridge(alpha=0.1, random_state=77)    backtest_no_refit   \n",
       "16                  Ridge(alpha=0.1, random_state=77)       backtest_refit   \n",
       "17                  Ridge(alpha=0.1, random_state=77)     create_train_X_y   \n",
       "18                  Ridge(alpha=0.1, random_state=77)                  fit   \n",
       "19                  Ridge(alpha=0.1, random_state=77)  gridSearch_no_refit   \n",
       "\n",
       "         False       True  pct_improvement  \n",
       "0     2.853674   9.233681      -223.571717  \n",
       "1   129.822874  92.496529        28.751748  \n",
       "2     0.018000        NaN              NaN  \n",
       "3     1.330104        NaN              NaN  \n",
       "4    24.548890  77.863022      -217.175326  \n",
       "5     2.891752   3.798469       -31.355314  \n",
       "6   111.030921  86.056100        22.493573  \n",
       "7     0.029996        NaN              NaN  \n",
       "8     0.717866        NaN              NaN  \n",
       "9    23.100491  25.343611        -9.710274  \n",
       "10    2.516266   3.437793       -36.622786  \n",
       "11  186.235264  65.961237        64.581768  \n",
       "12    0.013000        NaN              NaN  \n",
       "13    1.724441        NaN              NaN  \n",
       "14   34.885274  39.199495       -12.366885  \n",
       "15    0.715881   0.862378       -20.463955  \n",
       "16    7.449928   3.115467        58.181243  \n",
       "17    0.015999        NaN              NaN  \n",
       "18    0.114108        NaN              NaN  \n",
       "19    2.783162   3.158578       -13.488834  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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iKiA6i+rX9whFJpTI08VeNknT56gU6dOyMjIgBACVapUwcaNG2Fubo7Vq1ejS5cuUFNTQ2ZmJpYvXy61jk2bNg0VKlTAkCFDsG3bNuzatQtOTk5wdXUFANSvXx8///xzoWwfEVFx43DySuJw8kRElIWJFxHRl02Z3IC3GhIREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYpxOHkiIiLCyUbexR1CofL++2Rxh0BEpIAtXkRERERERCrGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGKlKvGaMWMGZDKZwqtmzZrS/OTkZAwfPhwmJibQ19dHp06d8OTJk2KMmIiIiIiIvgSlKvECAAcHBzx+/Fh6/fPPP9K8MWPG4K+//sKOHTtw8uRJPHr0CB07dizGaImIiIiI6EtQ6p7jpaGhAQsLi2zT4+LisHbtWmzevBlNmjQBAAQFBcHOzg5nz56Fh4dHUYdKRERERERfiFLX4nXnzh1UqFABVapUgb+/P2JiYgAAly5dQlpaGnx9faWyNWvWROXKlXHmzJlc60tJSUF8fLzCi4iIiIiISBmlKvGqV68e1q9fj0OHDmHlypWIiopCw4YN8ebNG8TGxkJLSwtlypRRWMbc3ByxsbG51jl37lwYGRlJL0tLSxVvBRERERERlTal6lbDli1bSn87OTmhXr16sLKywvbt26Gjo1OgOidPnoyxY8dK7+Pj45l8ERERERGRUkpVi9eHypQpA1tbW0RGRsLCwgKpqal4/fq1QpknT57k2Ccsi1wuh6GhocKLiIiIiIhIGaU68Xr79i3u3r2L8uXLw93dHZqamggODpbmR0REICYmBp6ensUYJRERERERlXal6lbDb7/9Fl999RWsrKzw6NEjTJ8+Herq6ujevTuMjIzQv39/jB07FsbGxjA0NMTIkSPh6enJEQ2JiIiIiEilSlXi9eDBA3Tv3h0vXryAmZkZGjRogLNnz8LMzAwAsHjxYqipqaFTp05ISUmBn58fVqxYUcxRExERERFRaVeqEq+tW7fmOV9bWxs///wzfv755yKKiIiIiIiIqJT38SIiIiIiIvocMPEiIiIiIiJSMSZeREREREREKsbEi4iIiIiISMWYeBEREREREakYEy8iolIqOTkZ7du3h62tLZydndGsWTNERkYCAM6fPw8PDw+4urrCzs4OP/74Y671bNiwAY6OjnBxcYGrqysOHDhQVJtARERUapSq4eSJiEjRoEGD0LJlS8hkMixfvhwDBgzAiRMnMGjQIMycORNt27bFy5cvUbNmTbRp0wb29vYKy798+RIjR47E7du3YWFhgX/++QcdO3bE06dPi2mLiIiISia2eBERlVLa2tpo1aoVZDIZAMDDwwPR0dEAAJlMhtevXwMAEhISoKWlBWNj42x1ZGZmQgiBN2/eAABev36NSpUqFUn8REREpQlbvIiIvhBLly5Fu3btAABBQUFo164dpk6dimfPnuGXX36BhYVFtmVMTU2xatUquLm5wdjYGElJSTh27FhRh05ERFTiscWLiOgLMGfOHERGRmLu3LkAgHnz5mHu3LmIiYnB9evXMWXKFNy4cSPbcnFxcVi6dCnOnz+Pe/fuYe3atejQoQNSU1OLehOIiIhKNCZeRESl3IIFC7Br1y4cPHgQurq6eP78OXbv3o0ePXoAAKpUqQIPDw+cOnUq27JHjx5FmTJlYGdnBwD46quvEB8fj3v37hXpNhAREZV0TLyIiEqxRYsWYcuWLVICBQBly5aFnp4ejh8/DgB4/vw5zp07h1q1amVbvkqVKggPD0dsbCwA4MyZM0hPT4elpWWRbQMREVFpwD5eRESl1IMHDzBu3DhUqVIFPj4+AAC5XI5z585h+/btGD9+PNLT05GWlobRo0fD09MTALBq1So8evQIM2fOhJubG6ZMmYImTZpAU1MTGhoa2L59O7S1tYtz04iIiEocmRBCFHcQJUl8fDyMjIwQFxcHQ0PD4g6HiOiLkJycjG7duuHGjRvQ0dFBuXLlsHLlSlSrVg19+/bFqVOnoKOjA319fSxZsgR16tTJsR6ZTIZatWpBXV0dALBs2TI0bNiwwHHVX1a/wMt+bubsKF2/xXr/fbK4QyCiL4AyuUHpusoSEVGpldszyTp06IA1a9ZAQ0MD+/btQ+fOnaVh83MSGhoq3XZJRERUVNjHi4iIPnt5PZOsbdu20NDQkKY/fPgQ6enpxRUqERFRjph4ERFRifP+M8k+nN6qVSspEctJ06ZN4ezsjLFjxyIhIUGVYRIREUmYeBERUYny4TPJsvz222/Yvn07Vq9eneuy9+7dw6VLl3D69Gk8e/YM48ePV3W4REREAJh4ERFRCfLhM8mybNu2DYGBgTh69CjMzc1zXb5y5coAAD09PQwbNgyhoaEqj5mIiAjg4BpERJ819/EbizuEQnVpfu8CL5v1TLJjx44pDI6xfft2TJ06FceOHZMSq5y8evUKcrkcurq6yMzMxLZt2+Dq6lrgeIiIiJTBxIuIiD57eT2TzN/fHxYWFgp9voKDg2FiYqLwTLJbt25h8ODBkMlkSE9Ph5ubG5YuXVpcm0RERF8YJl5ERPTZq1SpEnJ77GRaWlquyw0ZMkT629PTE1euXCn02IiIiPKDfbyIiIiIiIhUjIkXERERERGRijHxIiIiIiIiUjEmXkRERERERCrGxIuIiIiIiEjFOKohEREVmZiZjsUdQuEqa1jcERARUQnBFi8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiIiIhUjIkXERERERGRijHxIiIiIiIiUjEmXkRERERERCrGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKMfEiIiIiIiJSMSZeREREREREKvbFJl4///wzrK2toa2tjXr16uH8+fPFHRIREREREZVSX2TitW3bNowdOxbTp0/Hv//+C2dnZ/j5+eHp06fFHRoREREREZVCX2TitWjRIgwcOBB9+/aFvb09Vq1aBV1dXaxbt664QyMiIiIiolLoi0u8UlNTcenSJfj6+krT1NTU4OvrizNnzmQrn5KSgvj4eIUXERERERGRMjSKO4Ci9vz5c2RkZMDc3Fxhurm5OW7dupWt/Ny5cxEYGFhU4SlwH7+xWNarKrsN5hd3CIWme1nD4g6hUM3ZUbouBd5/nyzuEArNpfm9izuEQla6tudUcQdQmEYWdwCUl9L0naA0fR8A+J3gc/a5fR/44lq8lDV58mTExcVJr/v37xd3SEREREREVMKUnpQ2n0xNTaGuro4nT54oTH/y5AksLCyylZfL5ZDL5UUVHhERERERlUJfXIuXlpYW3N3dERwcLE3LzMxEcHAwPD09izEyIiIiIiIqrb64Fi8AGDt2LAICAlC7dm3UrVsXS5YsQUJCAvr27Vvc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3Rvh4eEIDw9Hhw4d8OjRI2ne+6M0mpqaomnTpjh8+DAAICoqClFRUTk+e6xLly64cOEC4uPjAby7XZEjjhIRERF9fpRu8Ro5ciS++eYbjB8/Ho6OjtkG13Byciq04IhKq4+N0rhq1Sr0798fEydOhJqaGn755RepVev9URorV66M7777Dl5eXlBTU0PFihWxevXq4tw0IiIiIsqBTAghlFlATS17I5lMJvssBtewtrbGvXv3FKbNnTsXkyZNkt5fuXIFw4cPlx6YO3LkSEyYMCHf64iPj4eRkRHi4uJUPoKj+/iNKq2/qF2a37u4QyAiIiqRStN3An4foNJEmdxA6RavqKioAgdWFGbOnImBAwdK7w0MDKS/4+Pj0bx5c/j6+mLVqlW4evUq+vXrhzJlymDQoEHFES4REREREX0BlE68rKysVBFHoTEwMMj1mUe///47UlNTsW7dOmhpacHBwQHh4eFYtGgREy8iIiIiIlIZpQfXAIBNmzahfv36qFChgnRr35IlS7B3795CDa4g5s2bBxMTE7i6umL+/PlIT0+X5p05cwaNGjWClpaWNM3Pzw8RERF49epVjvWlpKQgPj5e4UVERERERKQMpROvlStXYuzYsWjVqhVev34t9ekqU6YMlixZUtjxKWXUqFHYunUrQkJCMHjwYMyZM0eh/1ZsbGy24biz3sfGxuZY59y5c2FkZCS9LC0tVbcBRERERERUKimdeC1btgxr1qzBlClToK6uLk2vXbs2rl69WqjBAcCkSZMgk8nyfN26dQsAMHbsWDRu3BhOTk4YMmQIFi5ciGXLliElJaXA6588eTLi4uKkF4fSJyIiIiIiZRVocA1XV9ds0+VyORISEgolqPeNGzcOffr0ybNMlSpVcpxer149pKenIzo6GjVq1ICFhQWePHmiUCbrfW79wuRyOeRyufKBExERERER/X9KJ142NjYIDw/PNsjGoUOHcnzA66cyMzODmZlZgZYNDw+HmpoaypUrBwDw9PTElClTkJaWJj1/7OjRo6hRowbKli1baDETERERERG9T+nEa+zYsRg+fDiSk5MhhMD58+exZcsWzJ07F7/++qsqYsyXM2fO4Ny5c/Dx8YGBgQHOnDmDMWPGoGfPnlJS1aNHDwQGBkoPpr127RqWLl2KxYsXF1vcRERERERU+imdeA0YMAA6OjqYOnUqEhMT0aNHD1SoUAFLly5Ft27dVBFjvsjlcmzduhUzZsxASkoKbGxsMGbMGIwdO1YqY2RkhCNHjmD48OFwd3eHqakppk2bxqHkiYiIiIhIpZROvADA398f/v7+SExMxNu3b6Vb+YqTm5sbzp49+9FyTk5OCA0NLYKIiIiIiIiI3lF6VMMffvgBUVFRAABdXd3PIukiIiIiIiL6nCmdeO3YsQPVqlWDl5cXVqxYgefPn6siLiIiIiIiolJD6cTr8uXLuHLlCho3bowFCxagQoUKaN26NTZv3ozExERVxEhERERERFSiKZ14AYCDgwPmzJmD//77DyEhIbC2tsbo0aNzfRYWERERERHRl6xAidf79PT0oKOjAy0tLaSlpRVGTERERERERKVKgRKvqKgozJ49Gw4ODqhduzbCwsIQGBiI2NjYwo6PiIiIiIioxFN6OHkPDw9cuHABTk5O6Nu3L7p3746KFSuqIjYiIiIiIqJSQenEq2nTpli3bh3s7e1VEQ8REREREVGpo3TiNXv2bOlvIQQAQCaTFV5EREREREREpUyB+nht3LgRjo6O0NHRgY6ODpycnLBp06bCjo2IiIiIiKhUULrFa9GiRfj+++8xYsQI1K9fHwDwzz//YMiQIXj+/DnGjBlT6EESERERERGVZEonXsuWLcPKlSvRu3dvaVrbtm3h4OCAGTNmMPEiIiIiIiL6gNK3Gj5+/BheXl7Zpnt5eeHx48eFEhQREREREVFponTiVa1aNWzfvj3b9G3btqF69eqFEhQREREREVFpovSthoGBgejatSv+/vtvqY/XqVOnEBwcnGNCRkRERERE9KVTusWrU6dOOH/+PExNTbFnzx7s2bMHpqamOH/+PDp06KCKGImIiIiIiEo0pVq80tLSMHjwYHz//ff47bffVBUTERERERFRqaJUi5empiZ27typqliIiIiIiIhKJaVvNWzfvj327NmjglCIiIiIiIhKJ6UH16hevTpmzpyJU6dOwd3dHXp6egrzR40aVWjBERERERERlQZKJ15r165FmTJlcOnSJVy6dElhnkwmY+JFRERERET0AaUTr6ioKFXEQUREREREVGop3cfrfUIICCEKKxYiIiIiIqJSqUCJ19q1a1GrVi1oa2tDW1sbtWrVwq+//lrYsREREREREZUKSt9qOG3aNCxatAgjR46Ep6cnAODM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xo2hqamJn3/+GWPGjIEQAtWqVcOiRYswcOBAaRkbGxvs378fY8aMwdKlS1GpUiX8+uuvHEqeiIiIiIhUqsQkXuvXr8/zGV4tWrRAixYtPlpP48aNERYWVoiRERERERER5a3UPceLiIiIiIjoc8PEi4iIiIiISMWYeBEREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiIiIhUjIkXERERERGRijHxIiIiIiIiUjEmXkRERERERCrGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKMfEiIiIiIiJSMSZeREREREREKsbEi4iIiIiISMWYeBEREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiIiIhUjIkXERERERGRijHxIiIiIiIiUjEmXkRERERERCrGxIuIiIiIiEjFmHgRERERERGpGBMvIiIiIiIiFWPiRUREREREpGJMvIiIiIiIiFSMiRcREREREZGKMfEiIiIiIiJSMSZeREREREREKsbEi4iIiIiISMVKROIVHR2N/v37w8bGBjo6OqhatSqmT5+O1NRUhXJXrlxBw4YNoa2tDUtLS/z444/Z6tqxYwdq1qwJbW1tODo64sCBA0W1GURERERE9IUqEYnXrVu3kJmZiV9++QXXr1/H4sWLsWrVKnz33XdSmfj4eDRv3hxWVla4dOkS5s+fjxkzZmD16tVSmdOnT6N79+7o378/wsLC0L59e7Rv3x7Xrl0rjs0iIiIiIqIvhEwIIYo7iIKYP38+Vq5cif/++w8AsHLlSkyZMgWxsbHQ0tICAEyaNAl79uzBrVu3AABdu3ZFQkIC9u3bJ9Xj4eEBFxcXrFq1Kl/rjY+Ph5GREeLi4mBoaFjIW6XIffxGldZf1C7N713cIRAREZVIpek7Ab8PUGmiTG5QIlq8chIXFwdjY2Pp/ZkzZ9CoUSMp6QIAPz8/RERE4NWrV1IZX19fhXr8/Pxw5syZXNeTkpKC+Ph4hRcREREREZEySmTiFRkZiWXLlmHw4MHStNjYWJibmyuUy3ofGxubZ5ms+TmZO3cujIyMpJelpWVhbQYREREREX0hijXxmjRpEmQyWZ6vrNsEszx8+BAtWrRA586dMXDgQJXHOHnyZMTFxUmv+/fvq3ydRERERERUumgU58rHjRuHPn365FmmSpUq0t+PHj2Cj48PvLy8FAbNAAALCws8efJEYVrWewsLizzLZM3PiVwuh1wu/+i2EBERERER5aZYEy8zMzOYmZnlq+zDhw/h4+MDd3d3BAUFQU1NsbHO09MTU6ZMQVpaGjQ1NQEAR48eRY0aNVC2bFmpTHBwMEaPHi0td/ToUXh6ehbOBhEREREREeWgRPTxevjwIRo3bozKlStjwYIFePbsGWJjYxX6ZvXo0QNaWlro378/rl+/jm3btmHp0qUYO3asVOabb77BoUOHsHDhQty6dQszZszAxYsXMWLEiOLYLCIiIiIi+kIUa4tXfh09ehSRkZGIjIxEpUqVFOZljYZvZGSEI0eOYPjw4XB3d4epqSmmTZuGQYMGSWW9vLywefNmTJ06Fd999x2qV6+OPXv2oFatWkW6PURERERE9GUpsc/xKi58jlfB8bkdREREBVOavhPw+wCVJl/Ec7yIiIiIiIhKCiZeREREREREKsbEi4iIiIiISMWYeBEREREREakYEy8iIiIiIiIVY+JFRERERESkYky8iIiIiIiIVIyJFxERERERkYox8SIiIiIiIlIxJl5EREREREQqxsSLiIiIiIhIxZh4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiGsUdABERERHl7dL83sUdAhF9IrZ4ERERERERqRgTLyIiIiIiIhVj4kVERERERKRiTLyIiIiISpHk5GS0b98etra2cHZ2RrNmzRAZGSnNnzNnDmrUqAE1NTXs2bNHYdl69erBxcUFLi4uqFWrFmQyGa5cuZJtHY8ePYKfnx9q1KgBJycndOrUCc+ePVP1phGVaEy8iIiIiEqZQYMGISIiApcvX0a7du0wYMAAaZ6vry8OHjyIRo0aZVvu3LlzCA8PR3h4OGbMmIFatWrByckpWzl1dXV8//33iIiIwJUrV1ClShWMHz9epdtEVNIx8SIiIiIqRbS1tdGq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PZqamjyvqVBVqVIFmpqauHDhgvQjQFxcHG7fvo1GjRrlux47Ozv8+eefCtPOnj370eWykq2EhASYm5ujQoUK+O+//+Dv759j+dOnT8PKygpTpkyRpt27d++j63FycsKDBw9w+/btPFu9VMXOzg7p6ek4d+4cvLy8AAAvXrxARESEtA+U5erqioyMDDx9+hQNGzYscGz8vqA83mpIhS4mJgZjx45FREQEtmzZgmXLluGbb75B5cqVoaWlhWXLluG///7Dn3/+iVmzZiksO2LECMTHx6Nbt264ePEi7ty5g02bNmW7/a5cuXI4fvw4bt26he7duyM9PR0AYG1tjaioKISHh+P58+dISUmBr68vPD090b59exw5cgTR0dE4ffo0pkyZgosXLyIpKQkjRozAiRMncO/ePZw6dQoXLlyAnZ2dVOfbt28RHByM58+fIzEx8ZP3kb+/P7S1tREQEIBr164hJCQEI0eORK9evWBubl7gOk1NTdGuXTuEhoYiKioKJ06cwKhRo/DgwYN812NtbY1z584hOjoaz58/L9Rf3Yhyw+tGziZOnIjTp09jxIgRCA8Px507d7B3716MGDFCqXqsra0RHByM2NhYvHr1qkCxEL3PwMAAAQEBGD9+PEJCQnD9+nX0798fampqCq0rHzNkyBDcuXMH48ePR0REBDZv3qzwbEkAGDp0KGbNmoVTp07h3r17OHv2LHr37g0zMzPptsTAwEDMnTsXP/30E27fvo2rV68iKCgIixYtAgBUr14dMTEx2Lp1K+7evYuffvoJu3fv/mh83t7eaNSoETp16oSjR48iKioKBw8exKFDh/K/sz5B9erV0a5dOwwcOBD//PMPLl++jJ49e6JixYpo165dgeq0tbWFv78/evfujV27diEqKgrnz5/H3LlzsX///nzXk9O1k/LGxIsKXe/evZGUlIS6deti+PDh+OabbzBo0CCYmZlh/fr12LFjB+zt7TFv3jwsWLBAYVkTExMcP34cb9++hbe3N9zd3bFmzZocf8W2sLDA8ePHcfXqVfj7+yMjIwOdOnVCixYt4OPjAzMzM2zZsgUymQwHDhxAo0aN0LdvX9ja2qJbt264d+8ezM3Noa6ujhcvXqB3796wtbVFly5d0LJlSwQGBgIAvLy8MGTIEHTt2hVmZmb48ccfP3kf6erq4vDhw3j58iXq1KmD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",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"----------------------------\")\n",
    "print(\"ForecasterDirectMultiVariate\")\n",
    "print(\"----------------------------\")\n",
    "steps = 5\n",
    "lags = 10\n",
    "estimators = [\n",
    "    Ridge(random_state=77, alpha=0.1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    LGBMRegressor(random_state=77, n_jobs=-1, n_estimators=50, max_depth=5, verbose=-1),\n",
    "    HistGradientBoostingRegressor(random_state=77, max_iter=50, max_depth=5,),\n",
    "]\n",
    "param_grids = [\n",
    "    {'alpha': [0.1, 0.1, 0.1]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'n_estimators': [50, 50], 'max_depth': [5, 5]},\n",
    "    {'max_iter': [50, 50], 'max_depth': [5, 5]}\n",
    "]\n",
    "lags_grid = [50, 50, 50]\n",
    "elapsed_times = []\n",
    "\n",
    "for estimator, param_grid in zip(estimators, param_grids):\n",
    "    print(\"\")\n",
    "    print(estimator, param_grid)\n",
    "    print(\"\")\n",
    "    forecaster = ForecasterDirectMultiVariate(\n",
    "                     estimator        = estimator,\n",
    "                     lags             = lags,\n",
    "                     steps            = steps,\n",
    "                     level            = \"series_1\",\n",
    "                     transformer_exog = StandardScaler()\n",
    "                 )\n",
    "    \n",
    "    print(\"Profiling fit\")\n",
    "    start = time.time()\n",
    "    forecaster.fit(series=multi_series, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling create_train_X_y\")\n",
    "    start = time.time()\n",
    "    _ = forecaster.create_train_X_y(series=multi_series, exog=exog)\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "    print(\"Profiling backtesting refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             steps              = steps,\n",
    "             initial_train_size = int(len(y) * 0.9),\n",
    "             refit              = True,\n",
    "             fixed_train_size   = False,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "    print(\"Profiling backtesting refit no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit parallel\")\n",
    "    start = time.time()\n",
    "    cv = TimeSeriesFold(\n",
    "             steps              = steps,\n",
    "             initial_train_size = int(len(y) * 0.9),\n",
    "             refit              = False,\n",
    "         )\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = -1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling backtesting no refit no parallel\")\n",
    "    start = time.time()\n",
    "    metric, backtest_predictions = backtesting_forecaster_multiseries(\n",
    "                                       forecaster    = forecaster,\n",
    "                                       series        = multi_series,\n",
    "                                       exog          = exog,\n",
    "                                       cv            = cv,\n",
    "                                       metric        = 'mean_squared_error',\n",
    "                                       interval      = None,\n",
    "                                       n_boot        = 500,\n",
    "                                       random_state  = 123,\n",
    "                                       verbose       = False,\n",
    "                                       show_progress = False,\n",
    "                                       n_jobs        = 1\n",
    "                                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)    \n",
    "    \n",
    "    print(\"Profiling GridSearch no refit parallel\")\n",
    "    start = time.time()\n",
    "    results_grid = grid_search_forecaster_multiseries(\n",
    "                       forecaster    = forecaster,\n",
    "                       series        = multi_series,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = -1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "    \n",
    "    print(\"Profiling GridSearch no refit no parallel\")\n",
    "    start = time.time()\n",
    "    results_grid = grid_search_forecaster_multiseries(\n",
    "                       forecaster    = forecaster,\n",
    "                       series        = multi_series,\n",
    "                       exog          = exog,\n",
    "                       cv            = cv,\n",
    "                       param_grid    = param_grid,\n",
    "                       lags_grid     = lags_grid,\n",
    "                       metric        = 'mean_squared_error',\n",
    "                       return_best   = False,\n",
    "                       verbose       = False,\n",
    "                       show_progress = False,\n",
    "                       n_jobs        = 1\n",
    "                   )\n",
    "    end = time.time()\n",
    "    elapsed_times.append(end - start)\n",
    "\n",
    "methods = [\n",
    "    \"fit\",\n",
    "    \"create_train_X_y\",\n",
    "    \"backtest_refit_parallel\",\n",
    "    \"backtest_refit_noparallel\",\n",
    "    \"backtest_no_refit_parallel\",\n",
    "    \"backtest_no_refit_noparallel\",\n",
    "    \"gridSearch_no_refit_parallel\",\n",
    "    \"gridSearch_no_refit_noparallel\"\n",
    "]\n",
    "\n",
    "results = pd.DataFrame({\n",
    "    \"estimator\": np.repeat(np.array([str(estimator) for estimator in estimators]), len(methods)),\n",
    "    \"method\": np.tile(methods, len(estimators)),\n",
    "    \"elapsed_time\": elapsed_times\n",
    "})\n",
    "results[\"estimator\"] = results[\"estimator\"].str.replace(\"\\n              \", \" \")\n",
    "results['parallel'] = results.method.str.contains(\"_parallel\")\n",
    "results['method'] = results.method.str.replace(\"_parallel\", \"\")\n",
    "results['method'] = results.method.str.replace(\"_noparallel\", \"\")\n",
    "results = results.sort_values(by=[\"estimator\", \"method\", \"parallel\"])\n",
    "\n",
    "results_pivot = results.pivot_table(index=[\"estimator\", \"method\"], columns=\"parallel\", values=\"elapsed_time\").reset_index()\n",
    "results_pivot.columns.name = None\n",
    "results_pivot[\"pct_improvement\"] = (results_pivot[False] - results_pivot[True]) / results_pivot[False] * 100\n",
    "display(results_pivot)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "bars = sns.barplot(data=results_pivot.dropna(), x=\"method\", y=\"pct_improvement\", hue=\"estimator\", ax=ax)\n",
    "for container in bars.containers:\n",
    "    ax.bar_label(container, fmt='%.1f', padding=3, fontsize=8)\n",
    "ax.set_title(\"Parallel vs Sequential (ForecasterDirectMultiVariate)\")\n",
    "ax.set_ylabel(\"Percent improvement\")\n",
    "ax.set_xlabel(\"Method\")\n",
    "ax.legend(fontsize=8, loc='lower left', bbox_to_anchor=(0, -0.31), ncols=1);"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "skforecast_19_py13",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.9"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
